您的位置:首页 > 其它

n皇后问题

2015-12-06 10:39 393 查看

n皇后问题


Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^

题目描述

在n×n 格的棋盘上放置彼此不受攻击的n 个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2 个皇后不放在同一行或同一列或同一斜线上。

设计一个解n 后问题的队列式分支限界法,计算在n× n个方格上放置彼此不受攻击的n个皇后的一个放置方案。

输入

输入数据只占一行,有1 个正整数n,n≤20。

输出

将计算出的彼此不受攻击的n个皇后的一个放置方案输出。第1行是n个皇后的放置方案。

示例输入

5


示例输出

1 3 5 2 4


提示

请按照题目要求用分支限界法解题。

来源

示例程序



#include<stdio.h>
int num,n;
int c[30];
int q[30];
int L[100];
int R[100];
void queen(int i)
{
int j,k;
for(j=1;j<=n;j++)
{
if(c[j]&&L[i-j+n+1]&&R[i+j])
{
q[i]=j;
c[j]=0;
L[i-j+n+1]=0;
R[i+j]=0;
if(i<n)
queen(i+1);
else
{
num++;
for(k=1;k<=n;k++)
if(k==1)
printf("%d",q[k]);
else
printf(" %d",q[k]);
printf("\n");
return ;
}
c[j]=1;
L[i-j+n+1]=1;
R[i+j]=1;
}
}
}
int main()
{
int i;
num=0;
scanf("%d",&n);
for(i=0;i<=n;i++)
c[i]=1;
for(i=0;i<=2*n;i++)
L[i]=R[i]=1;
queen(1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: