• 搜索练习题八皇后问题



    题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1213


    题目描述:

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

    【输入】

    (无)

    【输出】

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

    【输入样例】

    (无)

    【输出样例】

    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 
    ...以下省略
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int ans[9],sum;                //// ans[i]用于记录第i行皇后列号,sum用于记录方案数
     4 bool isp(int x1,int y1,int x2,int y2){
     5     return x1==x2||y1==y2||abs(x1-x2)==abs(y1-y2);            // 返回true:会互相攻击到;返回false:不会互相攻击到
     6 }
     7 void prin(){
     8     sum++;
     9     cout<<"No."<<sum<<endl;
    10     for(int i=1;i<=8;i++){
    11         for(int j=1;j<=8;j++){
    12             cout << (j > 1 ? " " : "") << (j == ans[i]);
    13         }            
    14         cout<<endl;
    15     }        
    16 }
    17 void dfs(int id){
    18     if(id>8){
    19         prin();                                // 说明前8行已经放好了
    20         return ;
    21     }
    22     for(int i=1;i<=8;i++){                    // 尝试在第id行第i列放皇后
    23         bool flag=true;                        // flag用于标识是否能放
    24         for(int j=1;j<id;j++){    
    25             if(isp(id,i,j,ans[j])){            // (id,i)和(j,ans[j])冲突
    26                 flag=false;
    27                 break;
    28             }
    29         }
    30         if(flag){                            // 如果循环结束flag仍为true说明i能放
    31             ans[id] = i;                    // 能放就先放上
    32             dfs(id+1);                        // 然后递归进行下一行的放置
    33         }        
    34     }
    35 }
    36 int main(){
    37     dfs(1);                                    // 从第1行开始放            
    38     return 0;
    39 }

  • 相关阅读:
    超简单实例使用websocket进行server和client实时通信
    antd的table行key自增长
    selenium元素定位Xpath,Contains,CssSelector
    slenium使用鼠标+键盘事件或者双击实现代码
    使用python+pychram进行API测试(接口测试)初级STEP 1
    linux命令小常识
    sql中limit使用方法
    Swagger-API测试工具实战
    写 test-case心得
    测试之路之[前奏]
  • 原文地址:https://www.cnblogs.com/ZKYAAA/p/12367764.html
Copyright © 2020-2023  润新知