程序演示结果
第1种方案:0 4 7 5 2 6 1 3
第2种方案:0 5 7 2 6 3 1 4
第3种方案:0 6 3 5 7 1 4 2
第4种方案:0 6 4 7 1 3 5 2
第5种方案:1 3 5 7 2 0 6 4
第6种方案:1 4 6 0 2 7 5 3
第7种方案:1 4 6 3 0 7 5 2
第8种方案:1 5 0 6 3 7 2 4
第9种方案:1 5 7 2 0 3 6 4
第10种方案:1 6 2 5 7 4 0 3
第11种方案:1 6 4 7 0 3 5 2
第12种方案:1 7 5 0 2 4 6 3
第13种方案:2 0 6 4 7 1 3 5
第14种方案:2 4 1 7 0 6 3 5
第15种方案:2 4 1 7 5 3 6 0
第16种方案:2 4 6 0 3 1 7 5
第17种方案:2 4 7 3 0 6 1 5
第18种方案:2 5 1 4 7 0 6 3
第19种方案:2 5 1 6 0 3 7 4
第20种方案:2 5 1 6 4 0 7 3
第21种方案:2 5 3 0 7 4 6 1
第22种方案:2 5 3 1 7 4 6 0
第23种方案:2 5 7 0 3 6 4 1
第24种方案:2 5 7 0 4 6 1 3
第25种方案:2 5 7 1 3 0 6 4
第26种方案:2 6 1 7 4 0 3 5
第27种方案:2 6 1 7 5 3 0 4
第28种方案:2 7 3 6 0 5 1 4
第29种方案:3 0 4 7 1 6 2 5
第30种方案:3 0 4 7 5 2 6 1
第31种方案:3 1 4 7 5 0 2 6
第32种方案:3 1 6 2 5 7 0 4
第33种方案:3 1 6 2 5 7 4 0
第34种方案:3 1 6 4 0 7 5 2
第35种方案:3 1 7 4 6 0 2 5
第36种方案:3 1 7 5 0 2 4 6
第37种方案:3 5 0 4 1 7 2 6
第38种方案:3 5 7 1 6 0 2 4
第39种方案:3 5 7 2 0 6 4 1
第40种方案:3 6 0 7 4 1 5 2
第41种方案:3 6 2 7 1 4 0 5
第42种方案:3 6 4 1 5 0 2 7
第43种方案:3 6 4 2 0 5 7 1
第44种方案:3 7 0 2 5 1 6 4
第45种方案:3 7 0 4 6 1 5 2
第46种方案:3 7 4 2 0 6 1 5
第47种方案:4 0 3 5 7 1 6 2
第48种方案:4 0 7 3 1 6 2 5
第49种方案:4 0 7 5 2 6 1 3
第50种方案:4 1 3 5 7 2 0 6
第51种方案:4 1 3 6 2 7 5 0
第52种方案:4 1 5 0 6 3 7 2
第53种方案:4 1 7 0 3 6 2 5
第54种方案:4 2 0 5 7 1 3 6
第55种方案:4 2 0 6 1 7 5 3
第56种方案:4 2 7 3 6 0 5 1
第57种方案:4 6 0 2 7 5 3 1
第58种方案:4 6 0 3 1 7 5 2
第59种方案:4 6 1 3 7 0 2 5
第60种方案:4 6 1 5 2 0 3 7
第61种方案:4 6 1 5 2 0 7 3
第62种方案:4 6 3 0 2 7 5 1
第63种方案:4 7 3 0 2 5 1 6
第64种方案:4 7 3 0 6 1 5 2
第65种方案:5 0 4 1 7 2 6 3
第66种方案:5 1 6 0 2 4 7 3
第67种方案:5 1 6 0 3 7 4 2
第68种方案:5 2 0 6 4 7 1 3
第69种方案:5 2 0 7 3 1 6 4
第70种方案:5 2 0 7 4 1 3 6
第71种方案:5 2 4 6 0 3 1 7
第72种方案:5 2 4 7 0 3 1 6
第73种方案:5 2 6 1 3 7 0 4
第74种方案:5 2 6 1 7 4 0 3
第75种方案:5 2 6 3 0 7 1 4
第76种方案:5 3 0 4 7 1 6 2
第77种方案:5 3 1 7 4 6 0 2
第78种方案:5 3 6 0 2 4 1 7
第79种方案:5 3 6 0 7 1 4 2
第80种方案:5 7 1 3 0 6 4 2
第81种方案:6 0 2 7 5 3 1 4
第82种方案:6 1 3 0 7 4 2 5
第83种方案:6 1 5 2 0 3 7 4
第84种方案:6 2 0 5 7 4 1 3
第85种方案:6 2 7 1 4 0 5 3
第86种方案:6 3 1 4 7 0 2 5
第87种方案:6 3 1 7 5 0 2 4
第88种方案:6 4 2 0 5 7 1 3
第89种方案:7 1 3 0 6 4 2 5
第90种方案:7 1 4 2 0 6 3 5
第91种方案:7 2 0 5 1 4 6 3
第92种方案:7 3 0 2 5 1 6 4
方案种数:92
--------------------------------
每行的第m个数字n表示皇后在第m行第n+1列,如第92中方案的第一个数字7表示
这种方案的第一个皇后在第八列。
源程序
#include<stdio.h>
#include<math.h>
#define N 8
int result[N]={0};
int index=0;
int count=0;
int isRight(int r[],int n)
{
int i;
for(i=0;i<n;i++)
{
if(r[i]==r[n]||abs(r[i]-r[n])==abs(i-n))
{
return 0;
}
}
return 1;
}
void display(int r[],int n)
{
int i;
printf("第%d种方案:",count);
for(i=0;i<n;i++)
{
printf("%d ",r[i]);
}
printf("\n");
}
void backtrace(int r[],int n)
{
if(n>=N)
{
count++;
display(r,n);
return;
}
int i;
for(i=0;i<N;i++)
{
r[n]=i;
if(isRight(r,n))
{
backtrace(r,n+1);
}
}
}
int main()
{
backtrace(result,0);
printf("方案种数:%d\n",count);
return 0;
}
设计思路
- 本题目用一维数组即可,不需要二维,可以降低复杂度。
- 一维数组中任一元素arr[i]存储第i+1行中皇后该放的位置。
- 运用好递归算法有助于代码的实现。
- 判断第n+1行皇后放的位置是否合法,需要跟前面的进行对比,如果和前面已经放的位置同列,即arr[n]是否等于arr[i],其中i属于0~n-1;同时皇后可以斜着吃子,所以还需要判断n-i的绝对值是否等于arr[n]-arr[i]的绝对值,我们将国际象棋棋盘想象出来,如果第i行的皇后位置和第n行的皇后位置形成的直线与最上边的线成45%斜率,则他们可以相互攻击!
- 最后别忘了递归算法需要出口!