问题 A: 【递归入门】全排列

题目描述

     排列与组合是常用的数学方法。 
先给一个正整数 ( 1 < = n < = 10 ) 
例如n=3,所有组合,并且按字典序输出: 
1 2 3 
1 3 2 
2 1 3 
2 3 1 
3 1 2 
3 2 1 

输入

输入一个整数n(  1<=n<=10)

输出

输出所有全排列

每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格)

样例输入

3

样例输出

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
#include<iostream>
using namespace std;

int num[11];
bool vis[11]={false};
int n;

void dfs(int index)
{
	if (index==n)
	{
		for (int i=0;i<n-1;i++)
		cout<<num[i]<<" ";
		cout<<num[n-1]<<endl;
		
		return;
	}
	
	for (int i=0;i<n;i++)
	{
		if (vis[i+1]==false)
		{
			num[index] = i+1;
			vis[i+1] = true;
			dfs(index+1);
			vis[i+1] = false;
		}
		
		
	}
}

int main()
{
	while (cin>>n)
	{
		dfs(0);
	}
	
	return 0;
}
原文地址:https://www.cnblogs.com/Romantic-Chopin/p/12451111.html