n皇后问题

来源:互联网 发布:qq空间推广软件 编辑:程序博客网 时间:2024/06/07 17:34

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;  }  

0 0
原创粉丝点击