zufeoj_八皇后问题

题目链接:http://acm.ocrosoft.com/problem.php?cid=1172&pid=40


题目描述

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

输入

(无)

输出

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

样例输出

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 
...以下省略


#include<bits/stdc++.h>
using namespace std;
int sum=0;
int a[11];
int book[11][11];
void output(int n){
    sum++;
    cout << "No. " << sum << endl;
    for(int i=1;i<=n;i++){
        for(int j=1;j<n;j++){
            cout<<book[j][i]<<' ';
        }
        cout<<book[n][i]<<endl;
    }
}
bool check(int x,int y){
    int n=8;
    for(int i=1;i<=x;i++){
        if(book[i][y]){
            return 0;
        }
        else{
            for(int j=1;j<=n;j++){
                if(book[i][j]){
                    if(abs(i-x)==abs(j-y)){
                        return 0;
                    }else{
                        break;
                    }
                }
            }
        }
    }
    return 1;
}
void dfs(int x,int n){
    if(x>n){
        output(n);
    } 
    else{
        for(int i=1;i<=n;i++){   
            if(check(x,i)){
                book[x][i]=1;
                dfs(x+1,n);
                book[x][i]=0; 
            }
        }
    }
}
int main(){
    dfs(1,8);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_37345402/article/details/80761179