八皇后问题

来源:互联网 发布:mac能玩csgo吗 编辑:程序博客网 时间:2024/06/08 19:31
问题描述会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将 8 个皇后放在棋盘上(有 8 * 8 个方格) ,使它们谁也不能被吃掉!这就是著名的八皇后问题。 
</pre><pre name="code" class="cpp">#include <stdio.h>int A[8][8];  //棋盘 int k;int isOK(int a, int b) { //A[a][b]可否放置棋子 int x,y,i;for(i=0;i<8;i++)if(A[a][i]==1||A[i][b]==1)  //横纵向检查 return 0;for(x=a-1,y=b-1;x>=0&&y>=0;x--,y--)  //左上 if(A[x][y]==1)return 0;for(x=a+1,y=b-1;x<8&&y>=0;x++,y--)  //左下 if(A[x][y]==1)return 0;for(x=a-1,y=b+1;x>=0&&y<8;x--,y++)  //右上 if(A[x][y]==1)return 0;for(x=a+1,y=b+1;x<8&&y<8;x++,y++)  //右下 if(A[x][y]==1)return 0;return 1;}void f(int n) { //八皇后递归,n表示第几行 int i,j;if(n>=8) {  //棋子放满,开始打印 for(i=0;i<8;i++) {for(j=0;j<8;j++)printf("%d",A[i][j]);printf("\n");}printf("\n");k++;  //统计次数 return;} for(i=0;i<8;i++){if(isOK(n,i)) {A[n][i]=1;  //放棋 f(n+1);A[n][i]=0;  //撤棋}}}int main() {f(0);printf("Toltal numbers:%d\n",k);return 0;}

0 0