Peter算法小课堂—DFS

DFS的简单应用

枚举非空子集

#include 
using namespace std;
int n,ok[20],p[20];
void print(){
	int m=0;
	for(int i=1;i<=n;i++)
		if(ok[i]) p[++m]=i;
	if(m==0) return ;
	for(int i=1;i>n;
	dfs(1);
	return 0;
}

枚举组合数

#include 
using namespace std;
int n,m,p[20];
void print(){
	for(int i=1;i>n>>m;
	dfs(1,0);
	return 0;
}

DFS的优化

来康道题

冠亚军

Peter算法小课堂—DFS_第1张图片

解决方法与代码

代码:

#include 
using namespace std;
const int N=10010;
string team[N];
int m,n,p[N];
bool vst[N];
void print(){//team[i]代表i号球队队名,p[x]代表x号排位选几号球队 
	for(int i=1;i<=m-1;i++) cout<>n>>m;
	for(int i=1;i<=n;i++) cin>>team[i];
	sort(team+1,team+1+n);
	dfs(1);
	return 0;
}

 看注释就能懂了,不懂的评论区问我哦

枚举决策

来康道题,染色问题

Peter算法小课堂—DFS_第2张图片

#include 
using namespace std;
const int N=20;
const int CLR=3;
char colors[CLR]={'B','G','R'};
int n,p[N];
void print(){
	for(int i=1;i<=n;i++) cout<>n;
	dfs(1);
	return 0;
}

 嗯嗯,注释参考上一题

拓展:如果有四个颜色,连续三个不同颜色,应该把第14行改成什么呢?

答案:x==1||x==2&&p[1]!=i||x>2&&p[x-1]!=i&&p[x-2]!=i

Peter提醒您:一定要点一个不要钱的关注哦

你可能感兴趣的:(算法,深度优先)