#include <cstdio> using namespace std; int n, val[10], v[10]; void dfs(int x) { if (x > n) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (v[j] == i) { printf("%d ", val[j]); break; } } } printf("\n"); return; } for (int i = 1; i <= n; i++) { if (!v[i]) { v[i] = x; // 直接用x作为访问标记 dfs(x + 1); v[i] = 0; // 恢复访问标记 } } } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &val[i]); } dfs(1); // 从1开始递归 return 0; } /************************************************************** Problem: 1685 User: admin Language: C++ Result: Wrong Answer ****************************************************************/