c++ n皇后问题

摘要:
题目描述会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上,使它们谁也不能被吃掉!这就是著名的八皇后问题。输入一个整数n输出每行输出对应一种方案,每种方案顺序输出每一行皇后所在的列号,相邻两数之间用空格隔开,按字典序输出。样例输入4样例输出24133142SourceCode#includeusingnamespacestd;boolused[11];intg[11][11];intn;boolflag=0;boolcheck{intxx=x,yy=y;while{ifreturn0;x--,y--;}x=xx,y=yy;while{ifreturn0;x--,y++;}return1;}voiddfs{if{for{forif{printf;break;}}printf("");flag=1;}forif{g[u][i]=1;used[i]=1;dfs(u+1);used[i]=0;g[u][i]=0;}}intmain(){cin˃˃n;memset;memset;dfs;ifcout˂˂-1˂˂endl;return0;}

题目描述

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

输入

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

输出

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

样例输入

4

样例输出

2 4 1 3
3 1 4 2

Source Code

#include <bits/stdc++.h>
using namespace std;
bool used[11];
int g[11][11];
int n;
bool flag=0;
bool check(int x,int y)
{
    int xx = x,yy = y;
    while(x >= 1&&y >= 1)
    {
        if(g[x][y] == 1) return 0;
        x--,y--;
    }
    x = xx,y = yy;
    while(x >= 1&&y <= n)
    {
        if(g[x][y] == 1) return 0;
        x--,y++;
    }
    return 1;
}
void dfs(int u)
{
    if(u == n + 1)
    {
        for(int i = 1;i <= n;i ++)
        {
            for(int j = 1;j <= n;j ++)
            if(g[i][j] == 1)
            {
                printf("%d ",j);
                break;
            }
        }
        printf("
");
        flag = 1;
    }
    for (int i = 1;i <= n;i ++)
    if(used[i] == 0&&check(u,i) == 1)
    {
        g[u][i] = 1;
        used[i] = 1;
        dfs(u + 1);
        used[i] = 0;
        g[u][i] = 0;
    }
}
int main()
{
    cin >> n;
    memset(used,0,sizeof(used));
    memset(g,0,sizeof(g));
    dfs(1);
    if(flag == 0) cout << -1 << endl;
    return 0;
}

免责声明:文章转载自《c++ n皇后问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server 2005 中的分区表和索引【注:本文转载自CSDN帮助文件,作者自用】二分类评估指标下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

DD-wrt+Wiwiz搭建私人免费(收费)WiFi认证页面+详细的操作教程

因此,请选择正确的DD-WRT版本将无线路由器连接到Internet。执行以下命令:#cd;wgethttp://dl.wiwiz.com/hsbuilder-util-latest-DD-WRT.tar.gz#cd/jffs ; tar zxf/tmp/root/hsbuilder-util-lalatest-DD-WRT.tar。gz#/jffs/usr...

RedisTemplate

在SpringBoot@RequestMapping(“/del/{key}”)publicStringdel(@PathVariable(“key”)Stringkey){try{//当该键不存在时,异常redisTemplate.delete(key);return“Success”;}将不会引发catch(Exceptione){returne.get...

js 预览 excel,js-xlsx的使用

js-xlsx简介SheetJS生成的js-xls x是一个非常方便的工具库,只能使用纯js读取和导出excel。它功能强大,支持多种格式,支持xls、xlsx和ods等十几种格式。本文以xlsx格式为例。官方github:https://github.com/SheetJS/js-xlsx支持演示在线演示地址:http://demo.haoji.me/20...

微信小程序知识点总结--组件

aspectFill缩放模式保持缩放图像的纵横比,并且只能完全显示图像的短边。也就是说,图片通常只在水平或垂直方向上是完整的,而另一个方向会被截取。...

docker run hangs问题排查记录

1.故障描述过去两天遇到了一个非常奇怪的问题。现在完整的故障描述如下:1)首先,我的同事告诉我,K8S集群中的一个工作节点将其状态更改为NoReady,并且在节点kubelet_truntime的错误日志中发现了大量此类日志E060301:50:51.45511776268remote。go:332]ExecSync1f0e3ac13faf224129bc4...

Linux系统添加永久静态路由的方法

按照Linux启动的顺序,rc本地的内容在Linux中的所有服务启动后执行。也就是说,local的内容在netfs之后执行。也就是说,当netfs启动时,不会添加服务器上的静态路由,因此无法成功装载netfs。...