标签:
n*n中选8个-->每行皇后选一列,用c[x]来存储列编号,枚举量为8!=40320
void search(int cur) { if(cur == n) tot ++; else for(int i = 0; i < n; i ++) { int ok = 1; c[cur] = i; for(int j = 0; j < cur; j++) if(c[j] == c[cur]||j+c[j] == cur+c[cur]||j-c[j] == cur-c[cur]) {ok = 0;break;} if(ok) search(cur+1); } }
牺牲空间提高效率
void search(int cur) { if(cur == n) tot ++; else for(int i = 0; i < n; i ++) { if(!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+n]) { c[cur] = i; vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = 1; search(cur+1); vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = 0; } } }
标签:
原文地址:http://www.cnblogs.com/ekinzhang/p/4356100.html