C/C++ 排列 图解递归过程【简单易懂,代码可以直接运行】
怎么说,这道题是老生常谈了
这道题图样可以抽象为深度递归搜索树:
点个👍吧,秋梨膏!!
这个图需要设置三个变量,一个存放数据num,一个标记位子u,一个标记数据是否被访问过st是一个bool型变量,没有访问过为false,访问过的设为true
需要注意的一点:
在退出递归的过程中需要恢复bool 数组中的值!!非常重要,不然递归过程中,数组中的数据就没法使用,原理如下图:
图解恢复现场:
点个👍吧,秋梨膏!!!
核心代码:
void dfs(int u,int num[],bool st[])
{
int i;
if(u > n)
{
for(i = 1;i <= n;i++)
printf("%d ",num[i]);
printf("\n");
}
完整代码如下:
#include<iostream>
#include<stdio.h>
using namespace std;
int N = 10;
int n;
void dfs(int u,int num[],bool st[])
{
int i;
if(u > n)
{
for(i = 1;i <= n;i++)
printf("%d ",num[i]);
printf("\n");
}
else
{
for(i = 1;i <= n;i++)
{
if(!st[i])
{
st[i] = true;
num[u] = i;
dfs(u + 1,num,st);
st[i] = false;
}
}
}
}
int main()
{
scanf("%d",&n);
int num[N];
bool st[N];
dfs(1,num,st);
return 0;
}
点个👍吧,秋梨膏!!!