8*8的棋盘 放入“皇后”棋子。
每个“皇后”棋子,横竖不能同行,斜线上也不能同行,问有多少总方法?
(经典回溯方法解决)
#include<stdio.h>
#define N 8
int count=0;
int num[N+1][N+1]={0};
int check_all(int x,int y){
//left->right
for(int i=0;i<N;i++){//horizontal
if(num[x][i]==1)return 0;
}
for(int i=0;i<N;i++){//
if(num[i][y]==1)return 0;
}
for(int i=1;x-i>=0&&y-i>=0;i++){
if(num[x-i][y-i]==1)return 0;
}
for(int i=1;x-i>=0&&y+i<N;i++){
if(num[x-i][y+i]==1)return 0;
}
return 1;
}
void dfs(int x,int y){
if(x==N){
count++;
return;
}
//if(check_line(x)==1)return ;
for(int i=0;i<N;i++){
if(check_all(x,i)&&num[x][i]==0){
num[x][i]=1;
dfs(x+1,i);
num[x][i]=0;
}
}
}
int main(){
dfs(0,0);
printf("%d",count);
return ;
}
答案是:92