编写出八皇后的算法->递归算法
#include <stdio.h>
int nCount=0;
int noDanger(int row,int j,int (*chess)[8]){
int i=0,k=0;
//判断每一行的指定列是否有皇后
for(i=0;i<8;i++){
if(chess[row][i]){
return 0;
}
}
//判断左上方
for(i=row;i>=0;i--){
for(k=j;k>=0;k--){
if(chess[i][k]){
return 0;
}
}
}
//判断右下方
for(i=row;i<8;i++){
for(k=j;k<8;k++){
if(chess[i][k]){
return 0;
}
}
}
//判断右上方
for(i=row;i>=0;i--){
for(k=j;k<8;k++){
if(chess[i][k]){
return 0;
}
}
}
//判断左下方
for(i=row;i<8;i++){
for(k=j;k>=0;k--){
if(chess[i][k]){
return 0;
}
}
}
return 1;
}
void EightQueen(int row,int n,int(*chess)[8]){
int chess2[8][8];//临时数组
int i=0,j=0;
for(i=0;i<8;i++){
for(j=0;j<8;j++){
chess2[i][j]=chess[i][j];//拷贝
}
}
if(row==8){
//表示排列完成
printf("%d\n",nCount++);//打印出第几组八皇后排列完成
for(i=0;i<8;i++){
for(j=0;j<8;j++){
printf("%d\t",chess2[i][j]);
}
printf("\n");
}
}else{
//还必须革命努力
for(j=0;j<n;j++){
if(noDanger(row,j,chess)){
for(i=0;i<8;i++){
chess2[row][i]=0;//这一行都清0
}
chess2[row][j]=1;//这一行这一列表示皇后占据
EightQueen(row+1,n,chess2);
}
}
}
}
int main(){
int chess[8][8],i,j;
//将数组进行初始化为0
for(i=0;i<8;i++){
for(j=0;j<8;j++){
chess[i][j]=0;
}
}
EightQueen(0,8,chess);
printf("一共 %d有多少种解决方法",nCount);
}