首先 这是不太正确的代码:#include<bits/stdc++.h>using namespace std;const int N=5004;int a[N];bool vis[N][N];int n;void dfs(int x,int y,int num){if(vis[x][y]==1) return ;if(x>n||y>n) return ;if(num==n+1) {for(int i=1;i<=n;i++)cout<<a[i]<<' ';cout<<endl;return ;}for(int i=x;i<=n;i++){for(int j=y;j<=n;j++){if(!vis[i][j]){for(int k=j;k<=n;k++) vis[i][k]=true,vis[n+1-k][k]=true;for(int q=i+1;q<=n;q++) vis[j][q]=true,vis[n+1-q][q]=true;num++;a[++num]=j;dfs(x+1,y+1,num);for(int k=j;k<=n;k++) vis[i][k]=false,vis[n+1-k][k]=false;for(int q=i+1;q<=n;q++) vis[j][q]=false,vis[n+1-q][q]=false;}}}}int main(){cin>>n;memset(a,0,sizeof(a));for(int i=1;i<n;i++){for(int j=1;j<=n;j++){dfs(i,j,0);}}return 0;}望前辈指点一二。