码迷,mamicode.com
首页 > 其他好文 > 详细

用dfs实现1到n的全排列

时间:2014-07-08 19:28:19      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:blog   os   2014   for   io   代码   

用dfs实现1到n的全排列。
我的做法是从第一个位置开始,用dfs找每个位置的数就好,
在某个位置的时候,从小到大枚举1到n的所有数,如果碰到
某个数之前没被用到就在这个位置选择这个数,然后搜索下个
位置的数值。
我的代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int perm[10000],used[10000],num;
void init()
{
	int i;
	memset(used,0,sizeof(used));
	scanf("%d",&num);
	for(i=0;i<num;i++)
		perm[i]=i+1;
}
void out()
{
	int i;
	for(i=0;i<num;i++)
	{
		if(i)
			printf(" ");
		printf("%d",perm[i]);
	}
	printf("\n");
}
void dfs(int pos)
{
	int i;
	if(pos==num)
	{
		out();
		return;
	}
	for(i=1;i<=num;i++)
		if(!used[i])
		{
			perm[pos]=i;
			used[i]=1;
			dfs(pos+1);
			used[i]=0;
		}
}
void permutation()
{
	init();
	dfs(0);
}
int main()
{
	permutation();
}


 

用dfs实现1到n的全排列,布布扣,bubuko.com

用dfs实现1到n的全排列

标签:blog   os   2014   for   io   代码   

原文地址:http://blog.csdn.net/stl112514/article/details/37501769

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!