LDUOJ 全排列问题#dfs

全排列问题

思路:
dfs搜索即可,如果填满了就输出,没填满的话判断这个数在这一次排列中有没有使用过,没有使用过就把它填在下一个位置上,然后搜索下一次排列

int n;
int a[10],vis[10];
void print()
{
	for(int i=1;i<=n;i++)
		printf("%d ",a[i]);
	printf("\n");
}

void dfs(int k)//当前是第几个数 
{
	if(k == n)//已经填满 
	{
		print();
		return ;
	}
	for(int i=1;i<=n;i++)
	{
		if(!vis[i])
		{
			a[k+1] = i;
			vis[i] = 1;
			dfs(k+1);
			vis[i] = 0;
		}
	}
}

int main()
{
	cin >> n;
	dfs(0);
	return 0;
}

发布了54 篇原创文章 · 获赞 0 · 访问量 1131

猜你喜欢

转载自blog.csdn.net/magic_wenge/article/details/105272408
今日推荐