4 条题解

  • 0
    @ 2023-11-11 9:51:30
    using namespace std;
    int a[100],x[100],n;//a数组用来存放每个皇后的列坐标 
    void dfs(int step){//放第step个皇后,也代表该皇后的行坐标
    	if(step==n+1){
    		for(int i=1;i<=n;i++)
    			cout<<a[i]<<" ";
    		cout<<endl;
    		return;
    	}
    	for(int i=1;i<=n;i++){//当前皇后选择的列坐标,当前皇后的坐标为:step,i
    		int j;
    		for(j=1;j<step;j++){//与之前的皇后做对比,之前皇后的坐标为:j,a[j] 
    			if(i==a[j]||abs(step-j)==abs(i-a[j]))//如果存在同列或者同对角线 
    				break;//就跳出此次循环,继续下个位置的尝试 
    		}
    		if(j==step){//说明这个位置与前面的皇后都不冲突 
    			a[step]=i;
    			dfs(step+1);
    		}
    	}
    	return;
    }
    int main(){
    	cin>>n;
    	dfs(1);
    	return 0;
    }
    	
    

    信息

    ID
    829
    时间
    1000ms
    内存
    16MiB
    难度
    5
    标签
    递交数
    123
    已通过
    50
    上传者