中兴捧月程序设计大赛求网络中两点之间的路径程序cpathWord下载.docx
- 文档编号:15121683
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:16
- 大小:99.41KB
中兴捧月程序设计大赛求网络中两点之间的路径程序cpathWord下载.docx
《中兴捧月程序设计大赛求网络中两点之间的路径程序cpathWord下载.docx》由会员分享,可在线阅读,更多相关《中兴捧月程序设计大赛求网络中两点之间的路径程序cpathWord下载.docx(16页珍藏版)》请在冰豆网上搜索。
10,11
11,12
11,2
12,13
13,14
15,23
16,24
17,25
18,19
18,1
20,21
20,29
20,3
21,22
22,23
23,24
24,32
26,27
26,34
27,28
27,35
28,36
29,37
30,31
32,40
32,33
32,31
33,25
33,41
36,44
37,38
37,45
39,30
39,4
40,5
40,49
43,42
43,50
43,6
44,43
45,7
45,8
46,37
46,47
47,48
48,40
拓扑图描述文件
拓扑图文件说明,出于简化的目的,网络拓扑节点用数字表示。
附一个节点较多的测试数据,该数据在在节点631到节点1980之间找路。
二、初赛阶段要求(含编程语言、开发及运行环境的要求)
1.编程语言:
C/C++或者JAVA
2.运行环境:
WindowsXP
3.源代码和算法说明
4.若采用c/c++,要输出可执行程序;
若采用java,给出jar和bat。
5.程序支持命令行参数,
/f后表示拓扑图文件
/s
表示源节点
/d表示目的节点
/c
表示条件(取值1-2,满足上面两个约束条件之一)
/o
表示输出结果文件
如cpath.exe
/ftopolink_example01.txt
/s20
/d32
/c2/otopolink_result01.txt
表示根据拓扑图文件topolink_example01.txt,计算节点20和节点32之间的主用和备用路径,备用路径要求满足约束条件2。
输出结果文件topolink_result01.txt内容可能的为
main:
20,21,22,23,24,32
backup:
20,29,37,46,47,48,40,32
三、初赛阶段审核标准及评价细则
测试结果80分,10组随机网络数据,网络规模:
网元结点数目100到5000不等。
在10分钟内完成计算并正确输出结果的,每计算正确一组数据加8分(主备各4分),
路径较短优,耗时较短优。
代码满分5分,可读性及注释。
文档满分15分,要求给出设计思想。
四、设计思想
针对该问题,可将网络中每个点看成一个节点,从而采用图来存储数据。
在程序中具体采用的是图的链接表进行存储。
寻找主用路径和备用路径采用回溯法求出多条路径,并从中选出满足条件的路径,之后将输出结果写入文件中。
程序设计主要包括命令处理模块,数据读取模块(含链接表建立),求解路径模块(含输出写入文件)三大模块。
命令处理模块中将会检测输入命令及其参数是否满足正确。
如果输入正确则从中提取相关参数以供后面进行求解使用。
如果输入命令不满足要求则给出错误提示并给出正确的命令格式样式。
数据读取模块实现从指定文件(文件名又命令处理模块提取的参数提供)读取节点数据及各条边,并将其存入链接表中。
求解路径模块根据命令中输入的源节点和目标节点在图中寻找满足要求的主用路径和备用路径。
本模块采用的回溯法求解路径,并进行判断是否满足条件。
如果满足则停止计算并将数据写入文件,若不满足则继续求解直至满足条件为止。
具体的程序设计及个模块的实现请看代码。
五、我的代码
#include<
stdio.h>
string.h>
#include<
math.h>
#defineNULL0
structedgenode
{
intedgeno;
structedgenode*next;
};
//定义顶点节点结构
typedefstructvex
structedgenode*first;
}vex;
//用于存放各顶点节点对应的第一个链指针
intcmderror(void);
intinitcmd(intargc,char*argv[]);
voidreadfile(charfilename[]);
intgetpath(intst,inten,intcond);
voidwriteno(intno,FILE*fp);
vex*g;
structedgenode*p,*q;
charrfile[16],wfile[16];
intn,e;
//*n是结点个数,e是边的个数*//
intsour,des,cond;
intmain(intargc,char*argv[])
{
//初始化输入命令,提取参数
initcmd(argc,argv);
//注意:
此处argv后不需要括号
//读入数据
readfile(rfile);
//计算路径并写入文件
getpath(sour,des,cond);
return0;
}
/*********************************************************************\
功能:
输入命令行不满足要求给出的提示
\*********************************************************************/
intcmderror(void)
printf("
*******************************************************************************\n"
);
请按下列格式输入命令:
\n"
cpath.exe/f***/s***/d***/c***/o***\n"
说明:
(1)/f后表示拓扑图文件;
(2)/s后表示源节点;
(3)/d后表示目的节点;
(4)/c后表示条件(取值1-2,满足上面两个约束条件之一);
(5)/o后表示输出结果文件.\n"
请重新输入!
exit
(1);
初始化输入命令,提取参数
intinitcmd(intargc,char*argv[])
charpara[5][16],test[5]={'
a'
'
inti,tem,count,temdata[5];
if(argc!
=6)
cmderror();
***********************************欢迎使用************************************\n"
for(i=1;
i<
6;
i++)
{
if(argv[i][1]=='
f'
||argv[i][1]=='
s'
d'
c'
o'
)
{
count=0;
tem=0;
count=strlen(argv[i]);
//求字符串的长度
switch(argv[i][1])
{
case'
:
for(tem=0;
tem<
count;
tem++)
rfile[tem]=argv[i][tem+2];
test[0]='
;
break;
sour=0;
count-2;
temdata[tem]=argv[i][tem+2]-48;
for(tem=count-2;
tem>
0;
tem--)
sour=sour+temdata[count-2-tem]*pow(10,tem-1);
test[1]='
des=0;
des=des+temdata[count-2-tem]*pow(10,tem-1);
test[2]='
if(argv[i][2]=='
1'
cond=1;
elseif(argv[i][2]=='
cond=2;
else
cmderror();
test[3]='
default:
wfile[tem]=argv[i][tem+2];
test[4]='
}
}
else
cmderror();
}
if(test[0]=='
&
test[1]=='
test[2]=='
test[3]=='
test[4]=='
return(0);
else
计算从节点st到节点en的路径,并将结果写入文件
参数:
st表示起点,en表示终点,cond表示所满足的条件编号
\*****************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中兴 程序设计 大赛 网络 两点 之间 路径 程序 cpath