云南大学软件学院计算机网络原理实验七.docx

上传人:b****8 文档编号:9817782 上传时间:2023-02-06 格式:DOCX 页数:13 大小:50.05KB
下载 相关 举报
云南大学软件学院计算机网络原理实验七.docx_第1页
第1页 / 共13页
云南大学软件学院计算机网络原理实验七.docx_第2页
第2页 / 共13页
云南大学软件学院计算机网络原理实验七.docx_第3页
第3页 / 共13页
云南大学软件学院计算机网络原理实验七.docx_第4页
第4页 / 共13页
云南大学软件学院计算机网络原理实验七.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

云南大学软件学院计算机网络原理实验七.docx

《云南大学软件学院计算机网络原理实验七.docx》由会员分享,可在线阅读,更多相关《云南大学软件学院计算机网络原理实验七.docx(13页珍藏版)》请在冰豆网上搜索。

云南大学软件学院计算机网络原理实验七.docx

云南大学软件学院计算机网络原理实验七

实验七、LinkStatesAlgorithm的实现

序号:

姓名:

学号:

2016成绩

1.实验目的:

通过编程模拟实现LSA.

2.实验环境:

VS.net软件开发平台,可以使用任何编程语言。

3.实验要求

(1)求网络中任何两个结点之间的最短路径(网络中至少有4个节点)。

(2)得到任何一个节点上的转发表。

4.实验内容、拓扑结构

通过链路状态算法计算A点到其它各点的cost,最终输出A的路由表。

算法提示:

Initialization:

2N'={u}/*uissourcenode*/

3forallnodesj/*jisdestnode*/

4ifjadjacenttou

5thenD(j)=c(u,j)

6elseD(j)=g

7

7Loop

8findinotinN'suchthatD(i)isaminimum

9additoN'

10updateD(j)foralljadjacenttoiandnotinN':

11D(j)=min(D(j),D(i)+c(i,j))

12/*newcosttojiseitheroldcosttojorknown

13shortestpathcosttoipluscostfromitoj*/

14untilallnodesinN'

4.实验分析,回答下列问题

(1)给出LSA算法的主要思想。

LSA算法即链路状态选路算法,该算法中,网络拓扑

和所有的链路费用都是已知的。

它的具体实现依据

Dijkstra算法,其主要思想是计算从某节点(源节点,u)

到网络中所有其他节点的最短路径。

其算法是迭代算法,即经算法的第k次迭代后,可知道到k个目的节点的最低费用路径,在在到所有目的节点的最低费用路径之中,这

k条路径具有k个最低费用。

(2)通过图表算出任何两个节点之间的最短路径,并给出每个节点上的转发表。

截图:

5303

oO

「一O3HoU

:

nW-*cuw—•"―I11

■ifiJlD;\llD€\codebllock\c++■codV'.Pijksrra-exe请输入节点卜敌t6

请输入起始节点*B

日标节点:

A最低费川路径足:

B——>A

晟低様用:

2

目标*点:

C晟低费用路径绘:

|b—>c

最低费用:

3亠__

LI标廿点:

D就低费川路栓足:

B—>D

显低费用:

2

U标廿点:

E显低费川路栓足:

B—-〉D>E显低费用:

3叶科科armnininhmrrK*

U标廿点:

F嚴低费用路於足:

B——〉[)—>e——>F最低费用:

5*杠卄科科杆和是否缔续:

y:

是n:

粉输入起始"点:

D

FI标节点:

A

很低费用略徒足:

D—>A

叫0玄出Ll—-忖标节点:

B

跟低费用路径足:

D—>B

最低费用:

2

!

1沙心:

C

最低费川路砒:

D—>E~>C

銀低费用:

2

******車*車*車***拿卓拿*車**

H标筋点:

E

谥低费用粘松是:

卜一>E

限低费用:

H标节点:

F掖低汲用略能绘:

D—>E——>F限低费用:

3蘇蕊厂;;辽二:

■^ISD:

\IDE\codeblock\c++code\Dijkstra.exe

诒输入起的节点:

E

忖标节点:

A加低费用坷怆绘:

E—>D~>Aid低费用:

2

************宰*****客**

冃标节点:

B最低费用路径是:

£一>D—>B扱低费川:

3

****#*4:

代**粒软*宜**4***

『I标”点:

C

记低费用略检足:

E——>C

區低费用:

1

****斗**材林*木********

n标霸点:

d

區低费用路径建:

E——>D阴低巧田订

I」标卩点:

F彊低费用路伦址:

E—>F區低费用:

2

iff输人起始节点:

F

II标卄点:

A最祗瀬用路径忌FE—'DA

尿低哉用:

4

**»**+*****+*******¥*

11标节点;B

晟低费甬路牲是:

F—E>BB

最低费用:

5

冃标节点:

亡虽曲榄用路径是:

F--->E-一>C

拥低册用:

3

*********************

H标节点:

n隔低费用跻植是:

F->E—>:

D彊低婕用:

3

¥*******¥******伙松**

II哪*T:

E员低瓒用略植足:

F--->E

最低瓒用:

2

甲艸艸艸艸艸艸*寧******

足沔做红:

尸足n:

Pr

ProcesEreturnpd1(0x1)esecutiontime:

1060.536sPressanykeytocontinue.

转发表:

A:

目的地

链路

最低费用

B

A>B

2

C

A->D->E->C

3

D

A>D

1

E

A->D->E

2

F

A->D->E->F

4

B:

目的地

链路

最低费用

A

B->A

2

C

B->C

3

D

B->D

2

E

B->D->E

3

F

B->D->E->F

5

 

C:

目的地

链路

最低费用

A

C->E->D->A

3

B

C->B

3

D

C->E->D

2

E

C->E

1

F

C->E->F

3

 

D:

目的地

链路

最低费用

A

D->A

1

B

D->B

2

C

D->E->C

2

E

D->E

1

F

D->E->F

3

 

E:

目的地

链路

最低费用

A

E->D->A

2

B

E->D->B

3

C

E->C

1

D

E->D

1

F

E->F

2

F:

目的地

链路

最低费用

A

F->E->D->A

4

B

F->E->D->B

5

C

F->E->C

3

D

F->E->D

3

E

F->E

2

源代码:

#include

#includeusingnamespacestd;

constintMAX=1000;constintOK=1;

constintFALSE=0;constintTRUE=1;

voidcreateGraph(int*arcs[],int&num)

{

cout<<"请依次输入各点的各条路径的cost:

"<

连,则输入1000)"<

cout<<""<

for(inti=0;i

{

arcs[i]=newint[num];

for(intj=O;j

cin>>arcs[i][j];

}

}voidinitRoute(int*R[],intRL[],intvNum){

for(inti=0;i

RL[i]=MAX;

R[i]=newint[vNum];for(intj=0;j

R[i][j]=-1;

}

}

voidupdateRoute(intR1[],intR2[],intdest,intnum)

{

for(inti=0;i

for(intj=0;j

{

if(R1[j]==-1)

{

R1[j]=dest;break;

}

}

}

voidDijkstra(int*arcs[],int*R[],intRL[],intvexnum)

{

chartemp;

intv0;

bool*visit=newbool[vexnum];cout<<"请输入起始节点:

";cin>>temp;

v0=(int)temp-65;//A的ASCII码是65cout<

if(v0>=vexnum)

{

cout<<"输入错误,请重新输入"<>v0;

}

else

{

for(intcnt=0;cnt

{

visit[cnt]=FALSE;//visit临时存储已经求得的最短路径RL[cnt]=arcs[v0][cnt];

if(RL[cnt]

{

R[cnt][0]=v0;R[cnt][1]=cnt;

}

}RL[v0]=0;visit[v0]=TRUE;

for(inti=1;i

{

intmin=MAX;

intv=v0;

for(intj=0;j

visit[j])if(RL[j]

v=j;min=RL[j];

}

visit[v]=TRUE;

for(intk=0;k

visit[k]&&(min+arcs[v][k]

RL[k]=min+arcs[v][k];updateRoute(R[k],R[v],k,vexnum);

}

}visit=NULL;

}

}

voidprintRoute(int*R[],intRL[],intvNum)

{

intq=0;

for(intdest=0;dest

{

if(RL[dest]!

=0)

{

printf("目标节点:

%c\n",dest+65);

if(R[dest][0]==-1)

{

cout<<"最短路径不存在!

"<

continue;

}

else

{

cout<<"最低费用路径是:

"<

for(intj=0;j

{

if(R[dest][j]!

=-1)

{printf("%c",R[dest][j]+65);cout<<(R[dest][j]==dest?

"\n":

"--->");

}

else

break;

}

}

:

"<

cout<<"最低费用

intmain()

{

intvNum;

cout<<"请输入节点个数:

cin>>vNum;

while(vNum<0)

{

cout<<"输入个数错误!

请重新输入:

";cin>>vNum;

}

cout<<""<

cout<<"你输入的"<

int**weight=newint*[vNum];

int**shortestRoute=newint*[vNum];

int*routeLen=newint[vNum];createGraph(weight,vNum);

cout<<""<

charisExit='y';

do

{initRoute(shortestRoute,routeLen,vNum);Dijkstra(weight,shortestRoute,routeLen,vNum);printRoute(shortestRoute,routeLen,vNum);

cout<<"是否继续:

y:

是n:

否";

cin>>isExit;

cout<

if(isExit=='n')break;

}while(isExit=='y');

returnOK;

}

315

011000

10001102

10005100020

谛输入起蛤惜豔A

艮标打点:

B

人—>8砒低即用:

2

********************卓

II杯仃点X

锻住掛用路袴足:

&—>D—>E—>C

***冷**#***#*=<**琲**平**

日輛节■左:

D

晟低锵用賂枪是:

A——>D

显仏抄口:

1

*****期******木*丰*甘材*

R林节点:

E

最低桃用略1±足:

A''D>E

说低nnj:

2

***inif**)|f»*«****Hir)tn|!

*

H标肯点;F

尬低费川确悴足:

i、\iC

忑低费用;4

**黑辱丰之=g卞捲*窃乂总*哮膽窃***

是朴诜铁:

丫:

是;口:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1