可以用dfs来做,代码如下:
#include<iostream> #include<algorithm> #include<string.h> #include<math.h> using namespace std; const int N=10; int path[N]; bool st[N]; // 计算u->n的所经过的路径path void dfs(int u) { if(u==8)//边界条件 { for(int i=0;i<8;i++) //这里是i是从0开始,i是数组下标 printf("%d ",path[i]); printf("\n"); return ; } else{ for(int i=1;i<=8;i++)//注意这里i是从1开始,因为这里是排列的1~8 { if(!st[i]){ path[u]=i; st[i]=true; dfs(u+1);//回溯之后,恢复现场 path[u]=0; st[i]=false; } } } } int main() { dfs(0); return 0; }