美文网首页
[DFS]求全排列问题

[DFS]求全排列问题

作者: FlyingReganMian | 来源:发表于2018-07-20 15:10 被阅读0次

问题:全排列的种树是N!,要求按字典序输出。
思路:我们可以把N个数两两建立无向边(即任意两个结点之间都有边,也就是一个N个结点的完全图),然后对每个点作为起点,分别做一次深度优先遍历,当所有点都已经标记时输出当前的遍历路径,就是其中一个排列,这里需要注意,回溯的时候需要将原先标记的点的标记取消,否则只能输出一个排列。如果要按照字典序,则需要在遍历的时候保证每次遍历都是按照结点从小到大的方式进行遍历的。

image.png

代码:

#include <iostream>
using namespace std;

void dfs(int arr[],int n,int visited[],int i,int out[])
{
    if(i == n)
    {
        for (int j = 0; j < n; ++j) {
            cout<<out[j]<<" ";
        }
        cout<<endl;
    } else{
        for (int j = 0; j < n; ++j) {
            if (visited[j] == 0)
            {
                out[i] = arr[j];
                visited[j] = 1;
                dfs(arr,n,visited,i+1,out);
                visited[j] = 0;
            }
        }
    }

}

int test_FullAranged()
{
    //freopen("in.txt","r",stdin);
    int n = 5;
    int arr[5] = {1,2,3,4,5};
    int visited[5];
    memset(visited,0, sizeof(visited));

    int out[5];

    dfs(arr,n,visited,0,out);

}

相关文章

  • [DFS]求全排列问题

    问题:全排列的种树是N!,要求按字典序输出。思路:我们可以把N个数两两建立无向边(即任意两个结点之间都有边,也就是...

  • leetcode指北---DFS

    DFS,也就是深搜,实质就是枚举。如果题目问的是一共多少种方法,多少种排列...尽管用。 全排列问题: 全排列:给...

  • 递归求全排列

    思路: 和手动求全排列一样,第一个位置有n种可能,第二个位置有n-1种可能......最后一个位置...

  • 全排列(DFS解法)

    题目链接[https://www.acwing.com/problem/content/844/] 回溯的时候,需...

  • 46. Permutations

    Description 找到数组全排列 Solution 暴力dfs with sortTime O(N! *N ...

  • 旅行商问题

    旅行商问题是一个NP问题。最简单的解法是枚举法:全排列,DFS 根据http://blog.csdn.net/q_...

  • 读后感:DFS解决全排列问题

    原文链接 DFS解决全排列问题,从一道奥数题开始说起。http://www.jianshu.com/p/897f2...

  • 排列

    0X00 模板题目 46. Permutations 很典型的「排列模板题目」用 dfs 生成所有排列, 通常使用...

  • 全排列

    求全排列最简单的就是递归了123 的全排列共有 6 个, 123 的全排列等于以 1 开头 23 的全排列, 加上...

  • 常用模板

    一、组合(combination) 递归版本 dfs版本 二、排列(permutations) 递归版本 三、df...

网友评论

      本文标题:[DFS]求全排列问题

      本文链接:https://www.haomeiwen.com/subject/psxepftx.html