#include<bits/stdc++.h> using namespace std; int n,val[10],v[10],f[10];//val值 visit f是存放打印的下标 //val 2 4 6 //f 1 2 3 // 1 3 2 void dfs(int x){ if(x>n){//x超出N代表都选择完毕 for(int i=1;i<=n;i++) printf("%d ",val[f[i]]); printf("\n"); return; } for(int i=1;i<=n;i++){ if(v[i]==0){//只有没访问过才能访问 f[x]=i;//增加这个i到f打印去 v[i]=1;//设为访问过 dfs(x+1); v[i]=0; //取消设为访问过 } } } int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>val[i]; dfs(1);//起点是1 因为x等下要和f下标有关系。我们为了让数组从1开始 } /************************************************************** Problem: 1685 User: admin Language: C++ Result: Wrong Answer ****************************************************************/