1 条题解

  • 0
    @ 2026-1-5 20:09:04

    #include<bits/stdc++.h>

    using namespace std;

    int a[10][10],sum,b[100][10];

    bool check(int x,int y){

    for(int i=1;i<x;i++) if(a[i][y]==1) return false;
    
    for(int i=x+1;i<=8;i++) if(a[i][y]==1) return false;
    
    for(int i=x+1;i<=8;i++)if(y+i-x<=8&&a[i][y+i-x]==1)return false;
    
    for(int i=x-1;i>=1;i--)if(y-(x-i)>=1&&a[i][y-(x-i)]==1)return false;
    
    for(int i=x-1;i>=1;i--)if(y+(x-i)<=8&&a[i][y+(x-i)]==1)return false;
    
    for(int i=x+1;i<=8;i++)if(y-i+x>=1&&a[i][y-i+x]==1)return false;
    
    return true;
    

    } void dfs(int x){

    if(x>8){
    
    	sum++;
    
    	for(int i=1;i<=8;i++){
    
    		for(int j=1;j<=8;j++){
    
    			if(a[i][j]==1) b[sum][i]=j;
    
    		}
    
    	}
    
    	return ;
    
    }
    
    for(int i=1;i<=8;i++){
    
    	if(check(x,i)){
    		
    		a[x][i]=1;
    		
    		dfs(x+1);
    
    		a[x][i]=0;
    	}
    
    }
    

    }

    int main(){

    dfs(1); 
    
    int n;
    
    cin>>n;
    
    for(int i=1;i<=n;i++){
    
    	int m;
    
    	cin>>m;
    
    	for(int j=1;j<=8;j++){
    
    		cout<<b[m][j];
    
    	}
    
    	cout<<endl;
    
    }
    

    }

    • 1

    信息

    ID
    5383
    时间
    1000ms
    内存
    16MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者