数据结构:递归实现n皇后问题
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。
n皇后问题:在n*n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。
以8*8为例:
#include <stdio.h>
#include <math.h>
#define n 8
int x[n+1]={0};
int sum=0;
void print()
{
int i;
printf("%d:\n",sum);
for(i=1;i<=n;i++)
printf("%d:%d\n",i,x[i]);
}
int Place(int k)
{
for(int j=1;j<k;j++)
if(((int)fabs(k-j) == (int)fabs(x[j]-x[k]))
|| x[j]==x[k])
return 0;
return 1;
}
void Backtrack(int t)
{
if(t>n)
{ sum++;
print();
getchar();
}
else
for(int i=1;i<=n;i++)
{ x[t] = i;
if(Place(t)) Backtrack(t+1);
}
}
int main()
{
Backtrack(1);
}
8*8的 一共92种: