zoukankan      html  css  js  c++  java
  • noj算法 8皇后打印 回溯法

    描述:

    输出8皇后问题所有结果。

    输入:

    没有输入。

    输出:

    每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。

    输入样例:

     

    输出样例:

    输出的前几行:
    No 1:
    A.......
    ....A...
    .......A
    .....A..
    ..A.....
    ......A.
    .A......
    ...A....
    No 2:
    A.......
    .....A..
    .......A
    ..A.....
    ......A.
    ...A....
    .A......
    ....A...

     

    题解:

           定义一个数组 c[ ] 用来存放第i行对应的是第j列,判断每一行哪个位置能放,能放就继续搜索下去,不能就回溯。

     

    代码:

    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    
    using namespace std;
    int k=1,c[8],a[8][8];
    bool isok(int row)
    {
        for(int j=0;j!=row;j++){
            if(c[row]==c[j]||row-c[row]==j-c[j]||row+c[row]==j+c[j])
                return false;
        }
        return true;
    }
    
    void queen(int row)
    {
        if(row==8){
            printf("No %d:
    ",k++);
            for(int i=0;i<8;i++){
                for(int j=0;j<8;j++){
                    if(a[i][j]==1) cout<<'A';
                    else cout<<'.';
                }
                cout<<endl;
            }
        }
        else
        {
            for(int col=0;col!=8;col++){
                c[row]=col;
                if(isok(row))
                    {a[row][col]=1; queen(row+1);a[row][col]=0;}
            }
        }
    }
    
    int main()
    {
        queen(0);
        return 0;
    }

     

  • 相关阅读:
    git问题记录
    @Slf4j注解
    idea修改maven项目名
    spring的定时任务schedule
    @RequestParam详解
    统一全局异常处理将出错的栈信息打印到日志中
    python交互环境中导入文件中自定义的函数报错
    关于服务器的小技巧
    Python学习
    前后端分离时,获取不到session
  • 原文地址:https://www.cnblogs.com/y1040511302/p/9733381.html
Copyright © 2011-2022 走看看