8皇后的递归算法

来源:互联网 发布:易通软件 编辑:程序博客网 时间:2024/05/17 22:32
#include <stdio.h>#include <MATH.H>int count=0;int isTrue(int (*chess)[8],int i,int j){int q,p;for(q=0;q<8;q++)if(chess[i][q]==1||chess[q][j]==1)return 0;for(q=0;q<8;q++)for(p=0;p<8;p++){if((i-j)==(q-p)&&chess[q][p]==1){return 0;}else if((i+j)==(p+q)&&chess[q][p]==1)return 0;}return 1;}int eightqueen(int n,int  (*chess)[8]){if(n==8){for(int i=0;i<8;i++){for (int j=0;j<8;j++){printf("%d ",chess[i][j]);}printf("\n");}printf("\n");count++;}else{for(int i=0;i<8;i++)    if(isTrue(chess,i,n)){chess[i][n]=1;eightqueen(n+1,chess);    chess[i][n]=0;}}return count;}void main(){int count;int chess[8][8];for (int i=0;i<8;i++){for(int j=0;j<8;j++)chess[i][j]=0;}count=eightqueen(0,chess);printf("%d\n",count);}

1 二维数组用过之后封闭,即chess[i][j]=1;

2 判断其的可行函数,可用绝对值思想

0 0