可以用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;
}