spider68

nqueen

Jul 25th, 2021 (edited)
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. bool valid(vector<vector<int>>&ans,vector<vector<int>>&v,int row,int col,int n){
  5.     for(int i=0;i<row;i++){
  6.         if(v[i][col]==1)return false;
  7.     }
  8.     for(int i=row-1,j=col-1;i>=0 && j>=0;i--,j--){
  9.         if(v[i][j]==1)return false;
  10.     }
  11.     for(int i=row-1,j=col+1;i>=0 && j<n;i--,j++){
  12.         if(v[i][j]==1)return false;
  13.     }
  14.     return true;
  15. }
  16.  
  17. void solve(vector<vector<int>>&ans,vector<vector<int>>&v,int row,int n){
  18.     if(row==n){
  19.         vector<int>idx;
  20.         for(int i=0;i<n;i++){
  21.             for(int j=0;j<n;j++){
  22.                 if(v[i][j]==1)idx.push_back(j+1);
  23.             }
  24.         }
  25.         ans.push_back(idx);
  26.     }    
  27.     else{
  28.         for(int col=0;col<n;col++){
  29.             if(valid(ans,v,row,col,n)==true){
  30.                 v[row][col]=1;
  31.                 solve(ans,v,row+1,n);
  32.                 v[row][col]=0;
  33.             }
  34.         }
  35.     }
  36. }
  37.  
  38. vector<vector<int>>nqueen(int n){
  39.     vector<vector<int>>ans;
  40.     vector<vector<int>>pattern(n,vector<int>(n,0));
  41.     solve(ans,pattern,0,n);
  42.     return ans;
  43. }
  44.  
  45. int main() {
  46.     int n;
  47.     cin>>n;
  48.     vector<vector<int>>ans=nqueen(n);
  49.     for(auto x:ans){
  50.         for(auto y:x)cout<<y<<" ";
  51.         cout<<endl;
  52.     }
  53.     return 0;
  54. }
Add Comment
Please, Sign In to add comment