八皇后问题
2013-04-08 20:23 liuzq2013 阅读(145) 评论(0) 收藏 举报睡眠不足,思路很不清晰,所以写得比较凌乱,以后再改。
#include <iostream> #include <stdlib.h> using namespace std; int abs(int a) { if(a<0) a=-a; return a; } bool isSafe(int i1,int j1,int i2,int j2) { if(j1==j2||abs(j2-j1)==abs(i2-i1)) return false; return true; } void queen() { int p[8],count=0; int i=1;//for finalizing! bool a=true; for(int k=0;k<8;k++) p[k]=0; while(p[0]<8) { if(p[0]==8) exit(1); while(i<8) { if(p[i]>7) a=false; else a=true; for(int k=0;k<i;k++) { if(!isSafe(k,p[k],i,p[i])) {p[i]++;a=false;break;} } if(p[i]>7&&i!=0) { i--; p[i]++; for(int k=i+1;k<8;k++) p[k]=0; } if(a) i++; } if(i==8) { count++; cout<<"Method "<<count<<": "; for(int k=0;k<8;k++) cout<<p[k]<<"\t"; cout<<endl; i=6; p[i]++; for(int k=i+1;k<8;k++) p[k]=0; } } } int main() { queen(); return 0; }
浙公网安备 33010602011771号