1213:八皇后问题(c++)

前言:这是一道众周所知的经典问题,十分的耐人寻味。以下是题目以及题解。

【题目描述】

在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。

【输入】

(无)

【输出】

按给定顺序和格式输出所有八皇后问题的解(见样例)。

【输入样例】

(无)

【输出样例】

No. 1
1 0 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 0 0 1 0 0 0 
0 0 0 0 0 0 0 1 
0 1 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 
0 0 0 0 0 1 0 0 
0 0 1 0 0 0 0 0 
No. 2
1 0 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 0 1 0 0 0 0 
0 0 0 0 0 1 0 0 
0 0 0 0 0 0 0 1 
0 1 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 
0 0 1 0 0 0 0 0 
...以下省略

思路

首先千万不要忘了有两个及以上的其他函数时要在代码开头声明!!!

其次,No.后有个空格N大写o小写!”No. "

说正经的首先,我们表示棋盘不能潦草的就用一个二维带过,如果用二维数组在回溯的时候会肥肠马饭。So用了一个一维数组a表示,下标当行数,值是列数。还得判断这歌皇后安全否,then建立b,c,d确保行列对角线上只有一个皇后.

题解

#include <bits/stdc++.h>
using namespace std;
int k,l=0;
int a[9],c[17],b[9],d[17];
void print();
void f(int k){
    for(int i=1;i<=8;i++){
        if(!b[i]&&(!c[i+k]&&(!d[k-i+7]))){
            a[k]=i;
            b[i]=1;
            c[k+i]=1;
            d[k-i+7]=1;
            if(k==8)print();
            else f(k+1);
            b[i]=0;
            c[i+k]=0;
            d[k-i+7]=0;
        }
    }
}
void print(){
    l++;
    cout<<"No. "<<l<<endl;
    for(int i=1;i<=8;i++){
        for(int j=1;j<=8;j++){
            if(a[j]==i){
                for(int m=1;m<j;m++)
                    cout<<'0'<<' ';
                cout<<1<<' ';
                for(int m=1;m<=8-j;m++){
                    cout<<'0'<<' ';
                }
                cout<<endl;
            }
        }
    }
}
int main(){
    f(1);
    return 0;
}

相关推荐

  1. 1213皇后问题(c++)

    2024-01-23 23:24:01       29 阅读
  2. C++皇后

    2024-01-23 23:24:01       41 阅读
  3. N/皇后问题(递归)

    2024-01-23 23:24:01       41 阅读
  4. 皇后问题——回溯+深搜

    2024-01-23 23:24:01       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-23 23:24:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-23 23:24:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-23 23:24:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-23 23:24:01       18 阅读

热门阅读

  1. 如何提高sql执行效率

    2024-01-23 23:24:01       34 阅读
  2. Redis(六)发布订阅,不推荐

    2024-01-23 23:24:01       32 阅读
  3. C++程序设计(第3版)谭浩强 第10章 习题

    2024-01-23 23:24:01       32 阅读
  4. flume案例

    2024-01-23 23:24:01       34 阅读
  5. Kafka-服务端-API层

    2024-01-23 23:24:01       35 阅读
  6. linux-ubuntu-apt 2--各种配置文件详解

    2024-01-23 23:24:01       37 阅读
  7. Redis面试题25

    2024-01-23 23:24:01       27 阅读