GPT答: |
7i24.cn
|
][col-i]==1) return 0; } for(i=0;row+i<8&&col-i>=0;i++)//判断左下 { if(chess[row+i][col-i]==1) return 0; } for(i=0;i<8;i++)//判断行 { if(chess[row][i]==1) return 0; } for(i=0;row+i<8&&col+i<8;i++)//判断右下 { if(chess[row+i][col+i]==1) return 0; } for(i=0;row-i>=0&&col+i<8;i++)//判断右上 { if(chess[row-i][col+i]==1) return 0; } return 1;//不在同一列、同一行、同一斜线上,返回安全地带 } void print(int(*chess)[8])//输出棋盘 { int i,j,k,count=1;//count用于计数,共有几种摆法 printf("第%d种方案:\n",count); count++; for(i=7;i>=-1;i--) { for(j=-2;j<=9;j++) { if((i==-1||i==8)&&j==-2)//输出列号 printf(" "); else if(j==-2)//输出行号 printf("%d",i+1); else if((i+j)%2==0&&(j!=-2)) printf("■"); else printf("□"); //根据棋盘数组中的值来确定是否放置皇后 if((j!=-2)&&(chess[i][j]!=NULL)) { k = chess[i][j]; printf("%c ",'A'+k); } } putchar('\n'); } putchar('\n'); }//print函数结束 int queen(int row,int(*chess)[8])//递归函数,放置皇后。若能成功放置,则返回真。否则返回假。{ int col,i,j,flag = false;//flag表示是否成功放置皇后,默认为false(即未成功) static int count = -99999;//静态变量count用于计数,共有几种摆法(初始化为一个负极大值) //如果已经将八个皇后都成功地放到了棋盘上,则打印出这个方案,并返回真。 if(row>7){ print(chess);//打印出这个方案 count++;//计数器加一 flag=true;} //否则,在当前行中尝试每一个位置是否可以放置皇后,并递归调用queen函数进行下一步操作。 else{ for(col=7,col>=-3,col--){ //如果当前位置是安全的,则将该位置标记为已使用,并继续向下搜索 if(notdanger(row,col,chess)){ chess[row]
|