全排列详解C语言

这是完整代码:

#include<stdio.h>
int book[20],a[20],n;
void dfs(int step)
{
	int i=0;
	if(step==n+1)
	{
		for(i=1;i<=n;i++)
		{
			printf("%d",a[i]);
		}
		printf("\n");
		return ;
	}
	for(i=1;i<=n;i++)
	{
		if(book[i]==0)
		{
			a[step]=i;
			book[i]=1;
			dfs(step+1);
			book[i]=0;
		}
	}
}
int main()
{
	int x;
	scanf("%d",&n); 
	dfs(1);
	getchar();getchar();
	return 0;
}

这是注释过后的代码://解释一下,下面的代码printf括号中的汉字可以不用去理会,目的就是输出运行结果时可以方便的看出来这个代码运行到哪一步//

#include<stdio.h>
int book[20],a[20],n;
void dfs(int step)
{
	printf("第一步:step=%d\n",step);
	int i=0;
	if(step==n+1)
	{
		for(i=1;i<=n;i++)
		{
			printf("%d",a[i]);
		}
		printf("\n");
		return ;
	}
	for(i=1;i<=n;i++)
	{
		if(book[i]==0)
		{
			a[step]=i;
			book[i]=1;
			printf("请step=%d\na[step]=%d\ni=%d\nbook[i]=%d结束\n",step,a[step],i,book[i]);
			dfs(step+1);
			book[i]=0;
			printf("\t:");
		}
		printf("录step==%d**i==%d**a[step]==%d完\n",step,i,a[step]);
	}
}
int main()
{
	int x;
	scanf("%d",&n); 
	dfs(1);
	getchar();getchar();
	return 0;
}

这是注释后的代码的运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关于这个代码,说一下我的理解,我最开始不明白这个代码的地方是运行后的调用,就比如说当step等于n+1时,它返回到上一个dfs处;还有就是i的值,当i等于n+1的时候,此时就是for循环退出的时候,void函数代码执行完了,然后就会返回到上一个调用dfs的地方。和step==n+1的作用一样,都是返回到上一个调用dfs函数的地方,只要理清楚每次调用dfs函数时step,i,book[i],a[step]它们的值就行了,自己完整的体会一遍,就能懂了、

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值