算法设计与分析实验报告 频道分配问题

2020-06-08 11:58

贵州大学计算机科学与技术学院 计算机科学与技术系上机实验报告

课程名称:算法设计与分析 班级:信计101班 姓名:张 胜 实验序号:四 学号:1007010162 实验日期:2013-11-25 指导教师:程欣宇 实验成绩: 一、实验名称 回溯算法实验 - 频道分配问题 二、实验目的及要求 1、使用在线测评的算法题目评分系统来测试所写代码; 2、通过直观的应用问题,加深对回溯算法的理解; 三、实验环境 任意C或C++编写调试工具,北京大学ICPC在线测评系统POJ 四、实验内容 1、登陆POJ系统,找到题号为1129的题目-频道分配; 2、阅读题目,分析出求解该问题的思路; 3、使用回溯算法,实现本题; 4、进行简单测试,完成之后提交到POJ系统。 五、算法描述及实验步骤 回溯算法原理: 回溯法是一个既带有系统性又带有跳跃性的搜索算法,用它可以系统地搜索一个问题的所有解或任一解。它在问题的解空间树中,按深度优先的策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先策略搜索。 回溯法求问题的所有解时,要回溯到根,且根结点的所有子树都已经被搜索遍才结束。回溯法求问题的一个解时,只要搜索到问题的一个解就可结束。 频道分配问题描述: 当一个无线站广播覆盖一个非常大的区域时,需要使用转发器转发增强信号。然而,每个转发器使用的频道数必须仔细的选择,以使得相邻的转发器之间不会相互干扰。它们相互不干扰的条件是相邻的转发器使用不同的频道。 因为无线频谱是非常稀有的资源,因此,所给的转发器网络使用的频道数量必须最小化。你需要写一个程序读出转发器网络的描述,然后算出最小需要的频道数量。 注意:邻接关系具有对称性,如果A邻接B,则B邻接A。另外,因为转发器网络是平面的,所以通道不会交叉。 输入 输入由若干转发器网络的地图组成。每个地图的第一个行是转发器数量(1至26,用0表示输入结束)。每个转发器由字母A至Z标识,每行列出和一个转发器邻接的相邻转发器。 输出 对于每一个转发器网络地图,输出最少占用的频道数量(注意单复数)。 例子输入 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. 实验步骤: 1、建立频道分配问题的解题思路 1、建立频道分配问题的解题思路 首先构建回溯算法的基本框架,对每输入的若干转发器网络的地图(行数:lines),都对其所有可能的路径进行比较,找出相邻路径不同的组合即可。 2、构造算法框架 构造频道分配问题回溯算法如下: ① 回溯算法实现 void backtrack(int x) { if(x == lines) { int get=0; for(int i=0;iget) get = result[i]; int j; for(int i=1;i<=4;i++) { } for(j=0;j>lines&&lines) { int step = 1; m = 5; memset(set,0,sizeof(set)); memset(result,0,sizeof(result)); for(int i=0;i>ch; for(int j=2;ch[j]!='\\0';j++) set[i][ch[j]-'A']=1; 3、分析出算法复杂度 根据该算法的调度可知,每输入一个行数,遍历整个子树需要树的深度时间,即O(N)时间,找到一个满足条件的值就跳出。 六、调试过程及实验结果 按照输入示例输入数据如下: 由此可知,调试结果与预期结论一致。 七、总结 通过对本实验的学习,我对回溯算法有了进一步的理解,在解决问题和分析问题上的能力得到了一定的锻炼。不过,在本次实验过程中,也遇到一些困难,比如,刚开始在算法逻辑上没有考虑周全,使得调试结果屡次出错,后通过同学的查找,我发现了错误并给予解决。 八、附录 #include using namespace std; #define MAX 27 int set[MAX][MAX]; int result[MAX]; int lines; int m; void backtrack(int x) { if(x == lines) { int get=0; for(int i=0;iget) get = result[i]; if(get>lines&&lines) { int step = 1; m = 5; memset(set,0,sizeof(set)); memset(result,0,sizeof(result)); for(int i=0;i>ch; for(int j=2;ch[j]!='\\0';j++) set[i][ch[j]-'A']=1; } cout<


算法设计与分析实验报告 频道分配问题.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016-2017学年人教版初三英语上册期末试卷及答案 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: