#include<iostream.h> #include<stdlib.h> const int N=20; int q[N]; //存放皇后所在的行号 int count=0;//存放解的个数 void Print(int n) { count++; int i; cout<<"第"<<count<<"个解:"; for(i=1;i<=n;i++) cout<<"("<<i<<","<<q[i]<<")"; cout<<endl; } int Place(int k)//测试第K的q[k]行能否放置皇后 { int j; j=1; while(j<k) //j=1-(k-1)已经放置了皇后的列 { if((q[j]==q[k])||(abs(q[k]-q[j])==abs(j-k))) //第j列皇后是否在i行上,位置(q[j],j)和(q[k],k)是否在对角线上 return 0; j++; } return 1; } void Queens(int n)//求解八皇后问题 { int k; q[1]=0; k=1; //k是当前列,q[k]是当前行 while(k>0) //对所有的行执行以下语句 { q[k]=q[k]+1; //移到下一行 while(q[k]<=n&&!Place(k)) //找一个适合的位置 q[k]=q[k]+1; if(q[k]<=n) //找到了一个合适的位置(q[k],k) { if(k==n) //放置了所有的皇后,输出一个解 Print(n); else { k++; //转到下一列 q[k]=0; //从行头开始找 } } else k--; //回溯到上一行 } } void main() { int n; n=8; cout<<"八皇后问题求解如下:"; cout<<endl; Queens(n); cout<<endl; }
八皇后问题
最新推荐文章于 2022-10-14 23:24:33 发布