const int n = 4; void dfs(int cur) { if(n==cur) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(pos[i]==j) { cout<<'X'; } else { cout<<'O'; } } if(i==n-1) { cout<<endl; } } cout<<endl; couter++; } else { for(int i=0;i<n;i++) { if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur+n-i])//这个数组的作用是起到对应关系,只要这个坐标的行和列,满足cur+i相等,或者cur-i想的相等 { pos[cur]=i; vis[0][i]=1; vis[1][cur+i]=1; vis[2][cur-i+n]=1; dfs(cur+1); vis[0][i]=0; vis[1][cur+i]=0; vis[2][cur-i+n]=0; } } } }
#include <bits/stdc++.h> using namespace std; const int maxn=6; const int maxm=6; int vis[maxm][maxn]={0}; void dfs(int x,int y,int cur) { if(x<maxn&&x>=0&&y<maxm&&y>=0&&!vis[x][y]) { vis[x][y]=cur; if(cur==maxm*maxn) { for(int i=0;i<maxm;i++) { for(int j=0;j<maxn;j++) { cout<<setw(4)<<vis[i][j]; } cout<<endl; } vis[x][y]=0; return; } else { cur++; dfs(x-1,y-2,cur); dfs(x-1,y+2,cur); dfs(x-2,y-1,cur); dfs(x-2,y+2,cur); dfs(x+1,y-2,cur); dfs(x+1,y+2,cur); dfs(x+2,y-1,cur); dfs(x+2,y+1,cur); vis[x][y]=0; } } else { return; } } int main() { dfs(0,0,1); return 0; }