n皇后问题 NOJ 1319

来源:互联网 发布:北京软件大学 编辑:程序博客网 时间:2024/06/06 14:51

                                                    n皇后问题

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 114            测试通过 : 25 

题目描述

 

n×格的棋盘上放置彼此不受攻击的个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何个皇后不放在同一行或同一列或同一斜线上。设计一个解后问题的队列式分支限界法,计算在n´ n个方格上放置彼此不受攻击的n个皇后的一个放置方案。



输入

 

第一行有1 个正整数n。

输出

 

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

样例输入

5

样例输出

1 3 5 2 4


这一题很坑的就是输出,居然没有换行符!某学长替我PE了n次啊!

ff用来判断是否到达边界~

#include<iostream>#include<stdlib.h>#include<stdio.h>#include<string.h>using namespace std;int vis[1000][1000];//int vis[1000];int C[1000];int tot=0;int n;int ff,sum=0;void search(int cur){    int i;    if(cur==n)    {        ff=1;        return;    }    else for(i=0;i<n;i++)    {        if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+n])        {            C[cur]=i;            sum+=C[cur];            vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=1;            search(cur+1);            if(ff==1) return ;            vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0;        }    }}/*void search(int cur,int n){    int i,j;    if(cur==n)  tot++;    else for(i=0;i<n;i++)    {       int ok=1;       C[cur]=i;       for(j=0;j<cur;j++)        if(C[cur]==C[j]||cur-C[cur]==j-C[j]||cur+C[cur]==j+C[j])       {           ok=0;           break;       }       if(ok)        search(cur+1,n);    }}*/int main(){    while(scanf("%d",&n)==1)    {        ff=0;        for(int i=0;i<n;i++)        {            C[i]=0;        }        memset(vis,0,sizeof(vis));        search(0);        for(int i=0;i<n;i++)        {            if(n!=2&&n!=3)            {                if(i==0)                printf("%d",C[0]+1);                else                printf(" %d",C[i]+1);            }        }        printf(" ");    }}

n皇后问题

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 114            测试通过 : 25 

题目描述

 

n×格的棋盘上放置彼此不受攻击的个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何个皇后不放在同一行或同一列或同一斜线上。设计一个解后问题的队列式分支限界法,计算在n´ n个方格上放置彼此不受攻击的n个皇后的一个放置方案。



输入

 

第一行有个正整数n

输出

 

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

样例输入

5

样例输出

1 3 5 2 4

提示

 

题目来源

算法设计与实验题解

0 0
原创粉丝点击