noj算法 8皇后打印 回溯法

Posted y1040511302

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

 

 



















以上是关于noj算法 8皇后打印 回溯法的主要内容,如果未能解决你的问题,请参考以下文章

求教C语言回溯法写出八皇后问题的92种解

算法学步:回溯法-8皇后问题

回溯法解决八皇后问题

noj算法 迷宫问题 回溯法

noj算法 素数环 回溯法

noj算法 堡垒问题 回溯法