全排列的DFS做法

#include<iostream>
#include<cstring>
using namespace std;
const int maxn=1e3;
int vis[maxn];
int p[maxn];
int n;
int t=0;
void dfs(int x)
{
    if(x==n+1)
    {
        for(int i=1;i<=n;i++)
            cout<<p[i]<<" ";
            cout<<endl;
            return ;
    }
    for(int i=1;i<=n;i++)
    {
        if(!vis[i])
        {
            vis[i]=1;
            p[x]=i;
            dfs(x+1);
            vis[i]=0;
        }
    }
}
int main()
{
    while(cin>>n)
    {
        memset(vis,0,sizeof(vis));
        dfs(1);
    }
}

原文地址:https://www.cnblogs.com/liyexin/p/12680850.html

时间: 2024-10-16 02:32:15

全排列的DFS做法的相关文章

poj 1724ROADS(bfs和dfs做法)

1 /* 2 dfs比较好想,就是测试数据的问题,导致在遍历边的时候要倒着遍历才过! 3 */ 4 #include<iostream> 5 #include<cstdio> 6 #include<cstring> 7 #include<vector> 8 #include<algorithm> 9 #define Max 0x3f3f3f3f 10 using namespace std; 11 12 struct node{ 13 int D

HDU--1198 Farm Irrigation (并查集做法+DFS做法)

Problem Description Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot of samll squares. Water pipes are placed in these squares. Different square has a different type of pipe. There are 11 types of pi

全排列---(dfs)

全排列输入一个数n,按字典序输出1-n的全排列 #include "cstdio" #include "cstring" int visit[9],ans[9],n; void dfs(int k) { if(k==n){ for(int i=0;i<n;i++){ printf("%d",ans[i]); if(i!=n-1) printf(" "); } printf("\n"); return

牛客网NowCoder 2018年全国多校算法寒假训练营练习比赛(第四场)A.石油采集(dfs) B.道路建设(最小生成树prim) C.求交集(暴力) F.Call to your teacher(迪杰斯特拉乱用) H.老子的全排列呢(dfs)

菜哭了... A.石油采集 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 链接:https://www.nowcoder.com/acm/contest/76/A来源:牛客网 题目描述 随着海上运输石油泄漏的问题,一个新的有利可图的行业正在诞生,那就是撇油行业.如今,在墨西哥湾漂浮的大量石油,吸引了许多商人的目光.这些商人们有一种特殊的飞机,可以一瓢略过整个海面20米乘10米这么大的长方形.(上下相

poj1548Robots dfs做法

//搜索每一行 //将该行的所有点都清除 //然后再一改行的最后一个点的位置向下走一步 //然后将下面一行的所有点清除 //然后再重复上述操作 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=30; int line[maxn][maxn]; int C,R; int ans = 0; void dfs(int x , int y) { i

CodeVS 1294 全排列(dfs)

题目: http://codevs.cn/problem/1294/ 代码(用cout 会超时!!!): #include <iostream> #include<cstdio> using namespace std; int n; bool visited[15] = {false}; int res[15] = {0}; void dfs(int m) { if(m > n) { for(int i = 1; i < n; i++) { printf("

LeetCode47, 全排列进阶,如果有重复元素怎么办?

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第28篇,依然是全排列的问题. 如果对全排列不熟悉或者是最近关注的同学可以看一下上一篇文章: LeetCode46 回溯算法求全排列,这次是真全排列 LeetCode就是喜欢这样,把类似的问题放在一起,让你刷的时候一起刷,从而更加深刻地理解.今天的问题同样是全排列,不过稍稍不同的是,我们有一个限制条件不一样,给定的元素当中可能存在重复.但是元素存在重复,我们并不想最后的结果也出现重复,这个时候应该怎么办? 举个例子

蓝桥杯竞赛题《地宫取宝》DP做法

问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿). 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明. 请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝. 输入格式 输入一行3个整数,用空格分开:n

hdu 1242 dfs

Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison. Angel's friends want to save Angel. Their task is: approa