全排列(dfs , std)

std 標準竟然有兩個用來計算排列組合關係的算法,分別是next_permutation和prev_permutation

#include <bits/stdc++.h>

using namespace std;

#define ll long long

#define ull unsigned long long

int main(int argc, char const *argv[])
{
	char a[8] = {'1','2','3','4','5','6','7','8'};
	do{
		for(int i = 0;i < 7;i ++)
		{
			printf("%c",a[i]);
			printf(" ");
		}
		printf("%c\n", a[7]);
	}while(next_permutation(a,a + 8));
	return 0;
}

記錄一下dfs 版本

#include<iostream>
using namespace std;
const int N =501; 
typedef long long ll ;
#define f(i,l,r) for(int i=l;i<=r;++i)
#define g(i,l,r) for(int i=l;i>=r;--i)
int vis[N],a[N];
int m =8;
void dfs(int n )
{
	if(n==m){
		f(i,1,m-1)cout<<a[i]<<" ";
		cout<<a[n]<<endl;
	}
	n++;
	f(i,1,m)
	{
		if(vis[i])continue;
		vis[i]=1;
		a[n]=i;
		dfs(n);
		vis[i]=0;
	}
}
int main(){
	dfs(0);
	return 0;
}




發佈了59 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章