码迷,mamicode.com
首页 > 编程语言 > 详细

noj算法 8皇后打印 回溯法

时间:2018-09-30 21:51:52      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:using   void   回溯   ace   font   nbsp   输入   空格   space   

描述:

 

输出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:\n",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皇后打印 回溯法

标签:using   void   回溯   ace   font   nbsp   输入   空格   space   

原文地址:https://www.cnblogs.com/y1040511302/p/9733381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!