news 2026/1/2 18:21:24

OpenJudge NOI 2.5 131:Channel Allocation

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenJudge NOI 2.5 131:Channel Allocation

【题目链接】

OpenJudge NOI 2.5 131:Channel Allocation

【题目翻译】

信道分配

描述

当一个无线电站在为一个很大的区域广播时,为了让接受者接收到强信号,会使用中继器来重新发送信号。然而,为了距离近的中继器之间互不影响,必须仔细选择每个中继器使用的信道。只要临近的中继器使用不同的信道,这样的情况就是令人满意的。

因为无线电频谱是宝贵的资源,一个给定中继器网络所需要的信道数量应该尽量少。你必须写一个程序,读入对中继器网络的描述,而后确定最少信道数量。

输入:

输入由很多中继器网络的地图组成。每个地图的第一行是中继器的数量,在1到26之间。中继器由连续的以A为起始的大写字母表示。例如,10个中继器会有名字A,B,C,…,I和J。一个有0个中继器的网络表示输入结束。
在中继器数量后是一个表示邻接关系的列表。每行的格式是:
A:BCDH
表示了中继器B,C,D和H与中继器A邻接。第一行描述了邻接中继器A的中继器,第二行描述了邻接B的,依次类推直到所有的中继器。如果一个中继器不与任何其他中继器相邻,这一行的格式为:
A:
中继器以字母表顺序列出
注意邻接关系是一种对称的关系。如果A与B邻接,那么B一定与A邻接。而且,因为中继器都在一个平面中,连接相邻中继器形成的图不存在任何交叉的线段。

输出:

对于每个地图(除了最后一个没有中继器的地图),打印使得相邻频道互不干扰所需的最少频道。输出样例展示了这一行的格式。注意当只需要1个信道时,信道这个词是单数形式。

样例输入

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.

来源

Southern African 2001

【题目考点】

1. 图论:最小着色问题

解决方法:深搜回溯

【解题思路】

中继器是顶点,相连关系是边,建立无向图。中继器的频道相当于顶点的颜色。
对图中每个顶点进行着色,要求相邻顶点的着色不同,该问题为无向图中的最少着色问题。
使用color数组记录每个顶点的着色,如果color[i]为0,表示尚未着色。
设当前已使用着色数为c n cncn
当访问到一个顶点时,尝试对该顶点进行着色,分别尝试颜色1到颜色c n cncn
在尝试着色颜色c cc

  • 如果当前顶点有颜色为c cc的邻接点,那么当前顶点不能着色为c cc
  • 如果当前顶点的邻接点的颜色都不为c cc,那么当前顶点可以着色为c cc,接下来继续确定下一个顶点的颜色。

在尝试了颜色1到颜色cn后,还要再尝试将当前顶点着色为颜色c n + 1 cn+1cn+1,将总使用颜色数量增加1,继续进行搜索。

剪枝:

  1. 按度从大到小的顺序依次确定每个顶点的着色,这样会让更多的顶点受到邻接点已有着色的限制,减少搜索的规模(优化搜索顺序)
    这一步可以设顶点的索引数组d ddd[i]表示所有顶点按照度从大到小排序后第i ii个顶点的编号。
    按照d dd数组中存储的顶点顺序依次确定每个顶点的颜色。
  2. a n s ansans为已经搜索到的所有方案中,着色数最少的方案的着色数量。如果当前已经尝试颜色数量c n ≥ a n s cn\ge anscnans,则不需要再进行搜索了。(最优性剪枝)

搜索结束后,a n s ansans为当前图的最少着色数。
按照要求输出结果语句,注意a n s = 1 ans=1ans=1时,channel这个单词为单数channel。当a n s > 1 ans>1ans>1时,channel这个单词为复数channels。

特殊地,题目限定了了给定的图是平面图,平面图满足四色定理,即图的最少着色数小于等于4。因此本题的结果一定小于等于4。

【题解代码】

解法1:求图的最少着色数
#include<bits/stdc++.h>usingnamespacestd;#defineN30intn,ans,color[N],deg[N],d[N],edge[N][N];boolcmp(inta,intb){returndeg[a]>deg[b];}boolcheck(intu,intc)//顶点u的邻接点是否存在颜色c{for(intv=0;v<n;++v)if(edge[u][v]&&color[v]==c)returnfalse;returntrue;}voiddfs(intdi,intcn){if(cn>=ans)return;if(di==n){ans=cn;return;}intu=d[di];for(intc=1;c<=cn;++c)if(check(u,c)){color[u]=c;dfs(di+1,cn);}color[u]=cn+1;dfs(di+1,cn+1);color[u]=0;}intmain(){charc;string s;while(cin>>n&&n!=0){cin.get();//读掉换行符ans=1e9;memset(edge,0,sizeof(edge));memset(color,0,sizeof(color));memset(deg,0,sizeof(deg));for(inti=1;i<=n;++i){intu=cin.get()-'A';//读入起始顶点字符cin.get();//读掉冒号while((c=cin.get())&&c!='\n'){intv=c-'A';edge[u][v]=edge[v][u]=1;//为了去除重边,使用邻接矩阵deg[u]++,deg[v]++;}}for(inti=0;i<n;++i)d[i]=i;sort(d,d+n,cmp);dfs(0,0);if(ans==1)cout<<ans<<" channel needed.\n";elsecout<<ans<<" channels needed.\n";}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/24 6:54:08

小白秒懂 SQL 注入:图文详解 + 基础原理拆解,核心逻辑一看就会

一、Sql注入简介 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中&#xff0c;再在后台 Sql 服务器上解析执行进行的攻击&#xff0c;它目前黑客对数据库进行攻击的最常用手段之一。 二、Web 程序三层架构 三层架构(3-tier architecture) 通常意义上就…

作者头像 李华
网站建设 2025/12/30 13:39:42

柔性生产到底是什么?一文讲清它如何支撑多品类、小批量生产

几乎所有生产企业&#xff0c;只要一提到 多品类、小批量、交期压缩、客户定制&#xff0c;后面就一定会跟一句&#xff1a;我们要做柔性生产。但说实话&#xff0c;我在现场听到这个词时&#xff0c;心里反而会咯噔一下。不是因为这个方向不对&#xff0c;恰恰相反—— 而是因…

作者头像 李华
网站建设 2025/12/18 23:45:37

(200分)- 天然蓄水库(Java JS Python)

(200分)- 天然蓄水库&#xff08;Java & JS & Python&#xff09; 题目描述 公元2919年&#xff0c;人类终于发现了一颗宜居星球——X星。 现想在X星一片连绵起伏的山脉间建一个天热蓄水库&#xff0c;如何选取水库边界&#xff0c;使蓄水量最大&#xff1f; 要求&a…

作者头像 李华
网站建设 2025/12/18 23:43:36

时序数据选型、存储模型与选型

时序数据选型、存储模型与选型 一、时序数据的特征与挑战 时间戳驱动&#xff1a;数据天然带有时间维度&#xff0c;典型场景包括监控指标、传感器采集、交易日志。高吞吐写入&#xff1a;数据持续产生&#xff0c;要求数据库具备批量写入与乱序处理能力。查询模式特殊&#xf…

作者头像 李华
网站建设 2025/12/18 23:43:21

基于微信小程序的家政服务系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

作者头像 李华
网站建设 2025/12/18 23:43:06

MindSpore高效训练指南:从数据流水线到混合精度实战

在昇腾&#xff08;Ascend&#xff09;NPU上进行深度学习模型训练时&#xff0c;我们经常会遇到GPU转NPU的代码迁移问题&#xff0c;或者发现算力虽然强劲&#xff0c;但训练速度受限于IO或显存。作为一名在昇腾生态摸爬滚打的开发者&#xff0c;今天我想分享几个基于MindSpore…

作者头像 李华