1. 程式人生 > >全排列問題(DFS求解 | STL函式)

全排列問題(DFS求解 | STL函式)

1.利用dfs求全排列

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100;
int vis[maxn];
int a[maxn];
int cnt;

int dfs(int n)
{
	if(cnt == n)
	{
		for(int i = 1; i < n; i++)
			cout<<a[i]<<" ";
		cout<<a[n]<<endl;
	}
	for(int i = 1; i <= cnt; i++)
	{
		if(!vis[i] )
		{
			vis[i] = 1;
			a[n+1] = i;
			dfs(n+1);
			vis[i] = 0;
		}
	}
} 
int main()
{
	cin>>cnt;
	dfs(0);
	return 0;
	
}

2.利用stl自帶函式求

bool next_permutation(iterator start, iterator end);

next_permutation函式的返回值是布林型別

next_permutation()函式功能是輸出所有比當前排列大的排列,順序是從小到大。

prev_permutation()函式功能是輸出所有比當前排列小的排列,順序是從大到小。

#include <bits/stdc++.h>
using namespace std;
int main(){
	string str="abc";
	while(next_permutation(str.begin(),str.end()))
		cout<<str<<endl;
	return 0;
}

相關推薦

排列問題DFS求解 | STL函式

1.利用dfs求全排列 #include <cstdio> #include <iostream> #include <algorithm> using namespace std; const int maxn = 100; int v

CodeVS 1294 排列dfs

spl pan ref blog mes pac targe amp open 題目: http://codevs.cn/problem/1294/ 代碼(用cout 會超時!!!): #include <iostream> #include<cs

排列dfs

#include <stdio.h> #include <stdlib.h> char data[6] = {'A','B','C','D','E','F'}; char data1[6]; int count=0; bool isSafe(i

15. 排列DFS

程式碼:class Solution { public: /* * @param nums: A list of integers. * @return: A list of permutations. */ vector<vector<int>

1- n , n個數的排列dfs

這個模板呢可以應用於許多地方,例如:一串字元的全排列;或者給你一段字元或者數字,然後讓你找到一組或者多組滿足特定要求的 排列;給你一組數, 然後讓你求相鄰兩個數有特定關係的排列:等等許多類似的問題都可以通過下面這個求解n個數的全排列程式碼 來改變,可以都過新增以

排列遞迴與函式實現

Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s

字串排列效能分析Java版

具體的思路我就不寫了,借用網上的一張圖來表示: 我的程式碼如下: import java.util.*; public class Solution { public ArrayList<String> Permutation(String str

排列next_permutation,遞迴

#include<iostream> #include<cstdio> #include<algorithm> using namespace std; in

LeetCode-46.排列考察點:回溯演算法

給定一個沒有重複數字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 解題思路:這個...感覺很難講明白,

題15:排列不帶重複元素

題目描述: 給定一個數字列表,返回其所有可能的排列。 例如: 給出一個列表[1,2,3],其全排列為: [ [1, 2, 3], [1, 3, 2], [2, 1, 3]

排列的兩種解法dfsSTL

#include #include using namespace std; char str[15]; int main() { int n,i,j; while(scanf("%d",&n)!=EOF) { for

排列 遞歸求解+字典序 java 轉載

解決 nbsp 介紹 轉載 imp dict 問題 描述 clas 問題:給出一個字符串,輸出所有可能的排列。 全排列有多種算法,此處僅介紹常用的兩種:字典序法和遞歸法。 1、字典序法: 如何計算字符串的下一個排列了?來考慮"926520"這個字符串,我們從後向前找第一雙相

牛客網NowCoder 2018年全國多校算法寒假訓練營練習比賽第四場A.石油采集(dfs) B.道路建設(最小生成樹prim) C.求交集(暴力) F.Call to your teacher(迪傑斯特拉亂用) H.老子的排列呢(dfs)

初始 -o 地圖 意義 技術 tle bject ios urn 菜哭了。。。 A.石油采集 時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32768K,其他語言65536K 64bit IO Format: %lld 鏈

排列STL

c++ namespace using can ext setw spa mes 是不是 輸入一個整數n,輸出1~n的全排列(是不是很水) 在此記錄stl做法 #include<bits/stdc++.h> using namespace std;

【萬能搜尋】萬能DFS排列——普通演算法

DFS相信大家都很熟悉,下面就給出一種用DFS實現的演算法。 全排列 大家對於全排列是很熟悉的,比如123的全排列就有: 123 132 213 231 312 321 這六種。 現在,我們來設計一個演算法,來

深度優先搜尋dfs之1到n的排列收藏

/******** *給你一個數n,輸出1到n的全排列 *深度優先搜尋 ********/#include <stdio.h>#include <stdlib.h>int book[10], a[10], n;  void dfs(int step) 

DFS輸出n個數的排列遞迴實現

最近在研究DFS,可能腦子不太夠吧,很多題都不知道怎麼實現,全排列應該是最簡單的題了。執行成功的程式碼如下所示:#include<stdio.h> #include<iostream> #include<string.h> using na

nyist oj 19 擅長排列的小明dfs搜尋+STL

擅長排列的小明 時間限制:1000 ms  |  記憶體限制:65535 KB 難度:4 描述 小明十分聰明,而且十分擅長排列計算。比如給小明一個數字5,他能立刻給出1-5按字典序的全排列,

排列洛谷1061 Jam的計數法or NOIP 2006 普及組 第三題

div 順序 pre highlight 格式 其中 字符 是個 true Jam是個喜歡標新立異的科學怪人。他不使用阿拉伯數字計數,而是使用小寫英文字母計數,他覺得這樣做,會使世界更加豐富多彩。 在他的計數法中,每個數字的位數都是相同的(使用相同個數的字母),英文字母按

習題2.8 輸出排列20 分浙大版《數據結構第2版》題目集

text ble 存在 base scripts html 數據 ext 運行時 請編寫程序輸出前n個正整數的全排列(n<10),並通過9個測試用例(即n從1到9)觀察n逐步增大時程序的運行時間。 輸入格式: 輸入給出正整數n(<10)。 輸出格