题目:
在 n*n 的棋盘上摆放n个皇后,使其不能互相攻击,即任意两个皇后不能处于同一行、同一列或者同一斜线上。
代码(回溯):
#include<stdio.h>
#define m 8
int a[11];
int count;
int flag=0;
void traceback(int t){
if(t==m+1){
count++;
return;
}
else{
for(int i=1;i<=m;i++){
a[t]=i;
flag=1;
for(int j=1;j<t;j++){
if(i-t==a[j]-j || i+t==a[j]+j || a[j]==i){
flag=0;
break;
}
}
if(flag)
traceback(t+1);
}
}
}
int main()
{
traceback(1);
printf("%d\n",count);
return 0;
}
代码(暴力):
#include<stdio.h>
#include<math.h>
#define n 8
int a[n]={0};
int num,i,j,t;
int flag=0;
int count=0;
int main(){
for(num=0;num<pow(n,n);num++){
t=num;
for(j=0;j<n;j++){
a[j]=t%n;
t=t/n;
}
flag=1;
for(j=0;j<n;j++){
for(i=j+1;i<n;i++){
if(a[j]==a[i] || abs(j-i)==abs(a[j]-a[i])){
flag=0;
break;
}
}
}
if(flag==1)
count++;
}
printf("%d\n",count);
return 0;
}