首页 > 其他分享 >POJ1129 信道分配(DFS )

POJ1129 信道分配(DFS )

时间:2024-01-26 18:12:54浏览次数:27  
标签:POJ1129 26 int 中继器 DFS needed 信道

POJ1129 信道分配(DFS )

题目大意:每次有介于1-26个中继器,先输入一个数字n,表示中继器数量,然后一个冒号后面有与它相邻的中继器,每个中继器需要安排一个信道,不能与相邻的中继器相同,求最少的信道数量。

样本输入

2
A:
B:
4
A:BC
B:ACD
C:ABD
D:BC
4
A:BCD
B:ACD
C:ABD
D:ABC
0

示例输出

1 channel needed.
3 channels needed.
4 channels needed. 

思路简单,最多需要26个信道,从1开始dfs逐个尝试,成功分配到最后一个就返回

#include <cstdio>
#include <cstring>
bool neb[26][26];
int alo[26];
int n, ans, flag;
bool can;

void dfs(int deep){
	if(flag== n){
		can = true;
		return;
	}
	for(int i = 1;i <= ans;i++){
		int ok = 1;
		for(int j = 0;j < 26;j++){
			if(neb[deep][j] && alo[j] == i) ok = 0;
		}
		if(ok){
			alo[deep] = i;
			flag = deep + 1;
			dfs(deep + 1);
			if(flag == n) {
				can = true;
				return;
			}
			alo[deep] = 0;
		}
	}
}
int main() {
	while(scanf("%d", &n)){
		if(n == 0) break;
		memset(neb, false, sizeof(neb));
		memset(alo,0,sizeof(alo));
		char ch1, ch2;
		getchar();
		for(int i = 0;i < n;i++){
			ch1 = getchar();
			getchar();
			while((ch2 = getchar()) != '\n') {
				neb[ch1 - 'A'][ch2 - 'A'] = true;
			}
		}
		can = false;
		flag = 0;
		for(ans = 1;ans <= 26;ans++){
			dfs(0);
			if(can) break;
		}
		printf("%d %s needed.\n", ans, ans == 1 ? "channel" : "channels");
	}
	return 0;
} 

标签:POJ1129,26,int,中继器,DFS,needed,信道
From: https://www.cnblogs.com/zhclovemyh/p/17990392

相关文章

  • POJ2627 数独 (dfs or bfs)
    POJ2627数独(dfsorbfs)给出一个数独,空白用0表示,输出一个合理答案即可;SampleInput1103000509002109400000704000300502006060000050700803004000401000009205800804000107SampleOutput1436285795721394689867542313915427864689173527258639142374816956......
  • POJ1416 (dfs)
    POJ1416(dfs)公司现在要发明一种新的碎纸机,要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值(可以选择不切割)。比如,target的值是50,而纸条上的数字是12346,应该把数字切成四部分,分别是1、2、34、6。因为这样所得到的和43(=1+2+34+6)是所有可能中最接近而不超......
  • POJ 2531(DFS)
    POJ2531题目大意,一共N个网络节点,每个节点与其他节点通信需要消耗流量,把这n个节点分为AB两个集合,使得A集合与B集合之间的通讯流量的总和最大。输入,N+N行N个的数据,输出最大的流量(N<=20)3050305004030400思路:假设最开始所有的都在B集合,通过dfs搜索,将数量从1-......
  • [转帖]OS、PFS、DFS 有啥区别?一文搞懂 6 大临床试验终点
    https://oncol.dxy.cn/article/670607 说到肿瘤临床研究,就不得不说临床试验终点(EndPoint),比如大家熟知的OS、PFS、ORR还有DFS、TTP、TTF……不同的终点服务于不同的研究目的。让我们一起来看看常用的临床试验终点都有什么区别以及优缺点。总生存overallsurvival,OS......
  • 图论——浅谈理论,DFS序和欧拉序
    图论——浅谈理论,DFS序、时间戳和欧拉序提示:本文在树论基础上。下文图例DFS序:124579836.欧拉序:124457997885236631.回加欧拉序:124257975852123631.下文举例均指此图。DFS序周所周知,DFS为深度优先遍历,其框架如:voiddfs(i......
  • 搜索学习笔记+杂题 (进阶二 dfs/bfs的进阶)
    前言:由于搜索的题还是做的太少了,所以以后有可能会不定期更新。四、还是进阶的dfs/bfs相关题单:戳我1、dfs(1)meetinthemiddleP2962[USACO09NOV]LightsG颠覆了我对折半搜索的认知,果然,只要满足了折半搜索的几个性质,基本上都可以使用折半搜索来处理。首先我们拿到的是一张......
  • 搜索学习笔记+杂题 (进阶一 dfs/bfs的进阶)
    前言:没啥好说的了。所以只能来写博客了。搜索杂题:相关题单:戳我二、进阶dfs/bfs1、dfs进阶——折半搜索(meetinthemiddle)由于深搜的时间复杂度在每种状态有两个分支的情况下是\(O(2^n)\)。所以一般暴力深搜的数据范围就在\(20-25\)之间。而对于有一大类的题,它的搜索思......
  • 实验三HDFS 常用操作
    HDFS常用操作使用hadoop用户名登录进入Linux系统,启动Hadoop,参照相关Hadoop书籍或网络资料,或者也可以参考本教程官网的“实验指南”栏目的“HDFS操作常用Shell命令”,使用Hadoop提供的Shell命令完成如下操作:(1)启动Hadoop,在HDFS中创建用户目录“/user/hadoop”......
  • DFS求LCA
    Updateon2023.7.17:该技巧目前已知的最早来源:skip2004。Updateon2023.7.17:比较时,取时间戳较小的结点也是正确的,不用记录深度。DFS序求LCA无论是从时间常数,空间常数还是好写程度方面均吊打欧拉序。定义DFS序表示对一棵树进行深度优先搜索得到的结点序列,而时间戳DF......
  • 搜索学习笔记+杂题 (基础二 dfs/bfs的拓展)
    搜索杂题:博客中讲述的题的题单:戳我二、dfs/bfs的各种变式1、深搜深搜以指数级的时间复杂度闻名,稍不注意时间就会爆炸,所以一般会用到剪枝的技巧(这个技巧基本上是因题而异,需要平时的刷题与积累)。深搜同样也是一种可变性极高的算法(其实都可以不叫做一种算法,深搜已经是一种做题的......