自己写了一个二维棋盘的八皇后问题解法--递归思路。感觉没有直接一维数组,将数组分量索引当行数,值为列数那样简单。
#include#include int judgement(int qipan[8][8],int row,int col){ int judge=0; if(col==8) return 1; qipan[row][col]=1;//试着在一开始放一个棋子(1) //开始判断在这之前有没有不符合条件的(2) for (int i = 0; i < row; i++)//要遍历的行数() { for (int j = 0; j < 8; j++) { if (qipan[i][j]==1) { if (j==col || (i-row)==(j-col) ||(i-row)==(col-j)) { judge=1; break; } } } } if (judge==1){ qipan[row][col]=0; }else qipan[row][col]=1; return judge; } void Recurrect(int qipan[8][8] ,int *row, int *col){ if ((*row)==0 && (*col)==8) { return; } //判断这个位置是否是正确的,如果不正确 int judge=judgement(qipan,*row,*col);//可以将位置变成1 if (judge) { while((*col)<=7){ if(judgement(qipan,*row,*col)){//如果要回溯的话,一定要把本行的1变为零 (*col)++; }else break; } if((*col)==8){ for(int i=0; i<8; i++){//将本行的清空再去上一个 qipan[*row][i]=0; } (*row)--; for((*col)=0;(*col)<8;(*col)++){//判断上一个col的位置 if(qipan[*row][*col]==1){ qipan[*row][*col]=0; (*col)++; break; } } //判断下一个正确的位置 Recurrect(qipan,row,col); } } } void bahuanghou(){ int n=0; int row=0; int col=0; int qipan[8][8]={0};//c语言中,数组初始化只能用int常量 while (1) { //printf("%dn",row); // printf("%dn",col); Recurrect(qipan,&row,&col); if(row==0 && col==8){ printf("n%d",n); break; } // printf("%dn",row); // printf("%dn",col); //judge==0的时候 if (row==7) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { printf(" %d",qipan[i][j]); } } printf("n"); col++; } else{ row++; col=0; }; } } int main(){ bahuanghou(); system("pause"); return 0; }



