//8皇后(回溯法) #include <iostream> using namespace std; void queen_all(int k);//回溯的算法函数 int col[9]; bool row[9], digLeft[17], digRight[17]; int main() { int j; for (j = 0; j <= 8; j++) row[j] = true; for (j = 0; j <= 16; j++) digLeft[j] = digRight[j] = true; queen_all(1); return 0; } //8*8棋盘的第K列上找合理的配置 void queen_all(int k) { int i, j; char awn; //存储是否继续寻找的标志 for (i = 1; i <= 8;i++) //依次在1至8行上配置K列的皇后 if (row[i] && digLeft[k+i-1] && digRight[8+k-i]){ //可行位置 col[k] = i; //表示位置为K列的i行 row[i] = digLeft[k+i-1] = digRight[8+k-i] = false; //表示置有皇后 if (k == 8){ //找到一个可行解 for (j = 1; j <= 8; j++) cout << j << " " << col[j] << '\t'; //列和行 cout << endl << "是否需要继续寻找(Q--表示退出,其他继续:)"; cin >> awn; if (awn == 'Q'|| awn == 'q') exit(0); } else queen_all(k + 1); //递归至k+1列 row[i] = digLeft[k+i-1] = digRight[8+k-i] = true; //为下个可行方案做准备 } }
8皇后问题(回溯法)
猜你喜欢
转载自blog.csdn.net/qq_39026129/article/details/79674131
今日推荐
周排行