本篇文章简单介绍本人使用 C++ 中的基础 DFS 算法解决以下全排列问题的思路和实例代码。
组合排列
题目描述
先给一个正整数 ( 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的所有全排列。
样例输入
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 n;
const int N = 15;
int path[N];//记录路径
bool st[N];//判断(保证无重复输出)
void dfs(int x)//x是传入的变量,计算第x个数
{
if(x == n)//这条路走到头了,输出答案
{
for(int i = 0; i < n; i ++){
cout<<path[i]<<" ";
}
cout<<endl;
return;
}
for(int i = 1; i <= n; i ++)//1-n循环
{
if(! st[i])
{
path[x] = i;
st[i] = true;
dfs(x + 1);
st[i] = false;//路走完了,清除第一次的结果
}
}
}
int main()
{
cin>>n;
dfs(0);//开始输出第一个数
return 0;
}
后面的文章,我将演示如何使用相同的算法解决组合排列和迷宫问题。
谢谢阅读。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。