RT,不知道为什么,DLX中移除与恢复的遍历顺序必须相反,否则会T到飞起,求助各位大佬!
比如这两份代码,第二份比第一份慢了很多倍
for(int i=d[nowc];i!=nowc;i=d[i]){
ans[dep]=row[i];
for(int j=r[i];j!=i;j=r[j])remove(col[j]);
if(dance(dep+1))return 1;
for(int j=l[i];j!=i;j=l[j])resume(col[j]);
}
for(int i=d[nowc];i!=nowc;i=d[i]){
ans[dep]=row[i];
for(int j=r[i];j!=i;j=r[j])remove(col[j]);
if(dance(dep+1))return 1;
for(int j=r[i];j!=i;j=r[j])resume(col[j]);
}