八皇后问题(1,2)

#include<bits/stdc++.h>
using namespace std;
int a[10][10],c=0,g[1001],s=0;
void print(){
    for(int i=1; i<=8; i++)
        cout<<g[i];
        cout<<endl;
}
bool check(int x,int y){
    for(int i=1; i<=8; i++)
        if(a[i][y]==1) return false;
    for(int i=1; i<=8; i++)
        for(int j=1; j<=8; j++)
            if(i-j==x-y&&a[i][j]==1)
                return false;
    for(int i=1; i<=8; i++)
        for(int j=1; j<=8; j++)        
        if(i+j==x+y&&a[i][j]==1)      
        return false;
        return true;  
}
void dfs(int,int);
int main(){
    int n;
    cin>>n;
    for(int i=1; i<=n; i++){
        int b;
        cin>>b;
        dfs(1,b);
    }
    return 0;
}
void dfs(int r,int k){
    if(r==9){
        s++;
        if(s==k)
        print(); 
    } 
    for(int j=1; j<=8; j++){
        if(check(r,j)){
            g[r]=j;
            a[r][j]=1;
            dfs(r+1,k);
            a[r][j]=0;
        }
    }
}

 

#include<bits/stdc++.h>
using namespace std;
int a[10][10],c=0;
void print(){
    cout<<"NO. "<<c<<endl;
    for(int i=1; i<=8; i++){
        for(int j=1; j<=8; j++)
        cout<<a[j][i]<<' ';
        cout<<endl;
}}
bool check(int x,int y){
    for(int i=1; i<=8; i++)
        if(a[i][y]==1) return false;
    for(int i=1; i<=8; i++)
        for(int j=1; j<=8; j++)
            if(i-j==x-y&&a[i][j]==1)
                return false;
    for(int i=1; i<=8; i++)
        for(int j=1; j<=8; j++)        
        if(i+j==x+y&&a[i][j]==1)      
        return false;
        return true;  
}
void dfs(int r){
    if(r==9){
        c++;
        print();
        return;
    }
    for(int j=1; j<=8; j++){
        if(check(r,j)){
            a[r][j]=1;
            dfs(r+1);
            a[r][j]=0;
        }
    }
}
int main()
{
    dfs(1);
    return 0;
}

 

posted @ 2023-07-22 11:02  siuuuuuuuu  阅读(20)  评论(0)    收藏  举报