Loading

C++中使用基础DFS解决全排列问题的思路与实例代码

本篇文章简单介绍本人使用 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;
}

后面的文章,我将演示如何使用相同的算法解决组合排列和迷宫问题。
谢谢阅读。

posted @ 2020-08-18 12:57  张哲涵  阅读(598)  评论(0编辑  收藏  举报