NOI 2.5基本算法之搜索 1700:八皇后问题 编程样例
#include<cstdio> #include<iostream> #include<cstdlib> #include<iomanip> using namespace std; bool d[16]={0},b[9]={0},c[16]={0}; //排列的三种情况 int sum=0,a[9]; //总方案数和皇后 int search(int); //搜索 int print(); //输出 int main() { search(1); //从第一步开始搜索 } int search(int i) { int j; for (j=1;j<=8;j++) //8个皇后 if ((!b[j])&&(!c[i+j])&&(!d[i-j+7])) { a[i]=j; b[j]=1; //标记位置 c[i+j]=1; //标记位置 d[i-j+7]=1; //标记位置 if (i==8) print(); //如果排完8个皇后就开始输出 else search(i+1); b[j]=0; //回溯 c[i+j]=0; //回溯 d[i-j+7]=0; //回溯 } } int print() { int i,j; sum++; //总方案数累加 cout<<"No. "<<sum<<endl; //输出 for (j=1;j<=8;j++) { for(i=1;i<=8;i++) if(a[i]==j) cout<<"1 ";             //如果可以放,输出1 else cout<<"0 ";              //否则输出0 cout<<endl; } }
搜索还是蛮难的,这个程序改了好多次,经过老师的指导才AC掉。
c++很难,再加上我没什么做题哈哈。
posted on 2021-02-05 16:44  独眼  阅读(273)  评论(0编辑  收藏  举报