美文网首页
信息竞赛-1035-n皇后问题

信息竞赛-1035-n皇后问题

作者: 你在干嘛HJ | 来源:发表于2019-06-05 20:35 被阅读0次

题目描述

【题意】 

会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!

这就是著名的八皇后问题。 

【输入格式】 

一个整数n( 1 < = n < = 10 ) 

【输出格式】 

每行输出对应一种方案,按字典序输出所有方案。每种方案顺序输出皇后所在的列号,相邻两数之间用空格隔开。 

【样例输入】 

【样例输出】 

2 4 1 3

3 1 4 2

代码:

#include<cstdio>

#include<cstring>

//左斜从[1,1] 右斜从[n,1]

using namespace std;

int n,r,a[110];

bool col[110],row[110],lft[230],rht[230];

void dfs(int k){

if(k==n+1){

for(int i=1;i<=n;i++) printf("%d ",a[i]);

printf("\n");

}else{

for(int j=1;j<=n;j++){

if(row[k]&&col[j]&&lft[k+j-1]&&rht[j-k+n]){

a[k]=j;

row[k]=0;col[j]=0;lft[k+j-1]=0;rht[j-k+n]=0;

dfs(k+1);

a[k]=0;

row[k]=1;col[j]=1;lft[k+j-1]=1;rht[j-k+n]=1;

}

}

}

}

int main(){

scanf("%d",&n);

memset(col,1,sizeof(col));  //每行只能填一个,默认为true,可填

memset(row,1,sizeof(row));//每列只能填一个

memset(lft,1,sizeof(lft));//每左斜列只能填一个

memset(rht,1,sizeof(rht));//每右斜列只能填一个 ,

dfs(1);

return 0;

}

左斜、右斜值计算以四皇后为例

相关文章

  • 信息竞赛-1035-n皇后问题

    题目描述 【题意】 会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋...

  • 后宫佳丽三千,皇后只有一个

    第13届智能车竞赛总决赛颁奖舞台 | 姚祖婵供图 智能车竞赛创意比赛的预赛是八皇后问题,参赛车模作品在8×8的棋格...

  • 新手如何参加信息学竞赛NOIP,怎么入门(常见问题解答)?

    新手如何参加信息学竞赛NOIP,怎么入门(常见问题解答)? 新手学信息学竞赛如何入门,知乎上有一个话题讨论,我们也...

  • 竞赛问题

    最近我们学校准备竞赛,以备加分,将来自主招生时用。但是我兴致勃勃准备参加英语演讲时,看到老师的朋友圈上,这几项竞...

  • 八皇后问题(N皇后问题)

    八皇后问题是一个经典的递归回溯问题。 描述 八皇后问题是在一个 8*8 的棋盘上放置皇后,要求其放置后满足同一行,...

  • 质量月安全月活动

    安全信息,质量信息,竞赛 标语征集 每日一条信息征集

  • 皇后问题

    经常做算法赛题的朋友们都知道,八皇后问题是一道经典的搜索回溯题。简单来说,皇后问题就是在一个国际象棋棋盘上摆放若干...

  • 【算法】用回溯法(backtracking algorithm)

    什么是N-皇后问题? 说到这个N-皇后问题,就不得不先提一下这个历史上著名的8皇后问题啦。 八皇后问题,是一个古老...

  • N皇后问题(附带JavaScript源代码)

    什么是N-皇后问题? 说到这个N-皇后问题,就不得不先提一下这个历史上著名的8皇后问题啦。 八皇后问题,是一个古老...

  • 信息技术竞赛

    今天是学生去洪凝小学参加信息技术技能竞赛的日子,学生们早早等候在校门口,在刘主任的带领下,我们一行打了两辆出租车直...

网友评论

      本文标题:信息竞赛-1035-n皇后问题

      本文链接:https://www.haomeiwen.com/subject/fbzsxctx.html