N皇后问题

    xiaoxiao2021-03-25  110

    #include <iostream> #include <cmath> using namespace std; int N; int queenPos[100]; //用来存放算好的皇后位置。最左上角是(0,0) void NQueen( int k); int main() { cin >> N; NQueen(0); //从第0行开始摆皇后 return 0; } void NQueen( int k) { //在0~k-1行皇后已经摆好的情况下,摆第k行及其后的皇后 int i,j; if( k == N ) { // N 个皇后已经摆好 for(i=0;i<N;i++) cout<<queenPos[i]+1<<" "; cout<<endl; return ; } for( i = 0;i < N;i ++ ) //循环 1 { //逐尝试第k个皇后的位置 for( j = 0; j < k; j ++ ) { //循环2 //和已经摆好的 k 个皇后的位置比较,看是否冲突 if( queenPos[j] == i ||abs(queenPos[j] - i) == abs(k-j)) { break; //冲突,则试下一个位置 ---循迹至循环2处 } } if( j == k ) { //当前选的位置 i 不冲突 queenPos[k] = i; //将第k个皇后摆放在位置 i NQueen(k+1); //此处如果不能满足,这块是不会返回值的,函数不会结束,会回溯到上一层进行 1 处的循环下一次 } } //for( i = 0;i < N;i ++ ) }
    转载请注明原文地址: https://ju.6miu.com/read-7142.html

    最新回复(0)