先判断数位有没有超过n
if(x>n)
超过则输出数后输出换行并
回溯
接下来每个数从1到n for循环判断
for(int i=1;i<=n;i++)
然后判断之前用过没有
if(visited[i]==false)
之后记录到数组以后开始seach(x+1)继续往后搜
void search(int x)
{
if (x>n)
{
for (int i=1;i<=n;i++)
cout<<a[i]<<' ';
cout<<endl;
return;
}
for (int i=1;i<=n;i++)
{
if (visited[i]==false)
{
a[x]=i;//把i放到x的位置
visited[i]=true;//把i标记为已经使用过
search(x+1);
visited[i]=false;
}
}
}
void search(int x)
{
if(x>n)
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
return ;
}
for(int i=1;i<=n;i++)
{
if(visited[i]==false)
{
a[x]=i;
visited[i]=true;
search(x+1);
visited[i]=false;
}
}
}
void search(int x)
{
if(x>n)//元素数量不能大于规定的指定目标。
{
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;//输出这些数列。
}
for(int i=1;i<=n;i++)
{
if(visited[i]==false)//如果数没有使用
{
a[x]=i;//这个数列的第x个变量是i;
visited[i]=true;//这个数量不能使用;
search(x+1);//继续查找下一个变量是谁;
visited[i]=false;//为了能够回溯。
}
}
}//这是全排列函数
最后加search(1)
int n;
int a[101];
bool vr[101];
void hs(int x)
{
if(x>n)
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
return ;
}
for(int i=1;i<=n;i++)
{
if(vr[i]==0)
{
a[x]=i;
vr[i]=1;
hs(x+1);
vr[i]=0;
}
}
}
void search(int x)
{
if(x>n)//元素数量不能大于规定的指定目标。
{
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;//输出这些数列。
}
for(int i=1;i<=n;i++)
{
if(visited[i]==false)//如果数没有使用
{
a[x]=i;//这个数列的第x个变量是i;
visited[i]=true;//这个数量不能使用;
search(x+1);//继续查找下一个变量是谁;
visited[i]=false;//为了能够回溯。
}
}
}//这是全排列函数
最后加search(1)
void search(int x)
{
if(x>n)
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
return ;
}
for(int i=1;i<=n;i++)
{
if(visited[i]==false)
{
a[x]=i;
visited[i]=true;
search(x+1);
visited[i]=false;
}
}
}
void search(int x)
{
if(x>n)
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
return ;
}
for(int i=1;i<=n;i++)
{
if(visited[i]==false)
{
a[x]=i;
visited[i]=true;
search(x+1);
visited[i]=false;
}
}
}
深度优先搜索dfs
void print(){
total++;
for(int i=1; i<=r; i++)
cout<<a[i]<<' ';
cout<<endl;
}
void search(int t)
{
int i;
if(t>r) {
print();
return;
}
for(int i=1; i<=n; i++){
if(!b[i]){
a[t]=i;
b[i]=true;
search(t+1);
a[t]=0;
b[i]=false;
}
}
}

