算法1
思路:深搜,字母u表示当前数字,,设置两个数组,一个nums[],一个state[];
nums[]用来标记当前位置,state[N]={0},用来标记当前位置是否使用过,初始化为0,表示未使用过
C++ 代码
#include<iostream>
using namespace std;
int n;
const int N=10;
void dfs(int u,int nums[],bool state[]){//这里的表示当前数字
if(u>n){//表示大于输入数字,已经深搜完成,输出即可
for(int i=1;i<=n;i++)cout<<nums[i]<<' ';
cout<<endl;
}
else{
for(int i=1;i<=n;i++)
{
if(!state[i]){//如果该数字没有用过
state[i]=true;//把该数字标记为真
nums[u]=i;//让nums等于该数字
dfs(u+1,nums,state);//(是u+1,我第一遍这里写错了,写成i+1,怎么都不出结果,被自己蠢哭了)
state[i]=false;//恢复现场,也就是要回退
}
}
}
}
int main()
{
cin>>n;
int nums[N];//用来标记当前位置
bool state[N]={0};//用来标记当前位置是否使用过,初始化为0,表示未使用过
dfs(1,nums,state);//从数字一开始
return 0;
}