计算机网络路由算法以及LS算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

姓名:卢佳毅

学号:23320122203951

实验五

一、实验内容

1、基础部分(6分)

对于给定的网络拓扑图(给定路由器之间的距离/代价),通过DV算法实现路由表的建立过程,具体要求见本PPT 15-17页,可提前准备,必须当场完成。

2.对于给定的网络拓扑图,通过LS算法实现路由表的建立过程。(5分)

二、实验过程

1.DV算法

#include "stdio.h"

#include "stdlib.h"

#define MAX 30000

int flag=0,n;

int Arraya[100][100];

int Arrayb[100][100],next[100][100];

int BeginningPath()//说明初始化的路由连接信息

{

int i,j,t;

printf("请输入节点的个数:");

scanf("%d",&n);//一共有n个节点

for(i=0;i

{

for(j=i+1;j

{

printf("从第%d个节点到第%d个节点的费用:",i,j);

scanf("%d",&t);

if(t==-1) t=MAX;

Arraya[j][i]=t;

Arraya[i][j]=t;

next[i][j]=j;

next[j][i]=i;

}

Arraya[i][i]=0;

}

printf("\n\n在交换路由之前: \n");

for(i=0;i

{

printf("\t");

for(j=0;j

{

if(Arraya[i][j]==MAX)

printf("∞");

else

printf("%d ",Arraya[i][j]);

}

printf("\n");

}

return 0;

}

int DVRound(int round){ //DV算法

int i,j,k;

flag=0;

for(i=0;i

{ //通过三个循环来判定Arraya中的数据是否需要更新

for(j=0;j

{

if(j!=i)

for(k=0;k

{

if(k!=i)

if(Arraya[i][j]>Arrayb[i][k]+Arrayb[k][j])

{

Arraya[i][j]=Arrayb[i][k]+Arrayb[k][j];

Arraya[j][i]=Arraya[i][j];

next[i][j]=k;

next[j][i]=j;

flag=1;

/*如果数据发生了改变,那么flag数据就会改变,输出就不是最后一轮*/

}

}

}

}

if(!flag){ //数据始终没有改变,即达到了最后一轮输出printf("交换完信息网络的最短路由费用情况:\n");

for(i =0;i

{

printf("\t");

for(j=0;j

{

if(Arraya[i][j]==-1) printf("∞");

else printf("%d ",Arraya[i][j]);

}

printf("\n");

}

return -1;

//最后一轮输出已经结束,退出程序

}

else{

printf("第%d次交换路由的情况:\n",round);

for(i=0;i

{

printf("\t");

for(j=0;j

{

if(Arraya[i][j]==MAX)

printf("∞");

else

printf("%d ",Arraya[i][j]);

}

printf("\n");

}

for(i=0;i

{

printf("r%d next cost\n",i);

for(j=0;j

{

if(j!=i)

printf("r%d %d %d\n",j,next[i][j],Arraya[i][j]);

}

}

}

return 0;

}

int main(){

int i,j;

int round = 1;

BeginningPath();

while(1)

{

for(i=0;i

for(j=0;j

Arrayb[i][j]=Arraya[i][j];

if(DVRound(round)==-1) break;

round+=1;

}

printf("请输入要查看的路由:");

scanf("%d",&i);

printf("r%d next cost\n",i);

for(j=0;j

{

if(j!=i)

printf("r%d %d %d\n",j,next[i][j],Arraya[i][j]);

}

return 0;

}

2.LS算法

#include "stdio.h"

#include"stdlib.h"

#define MAX 30000

int n;

int Arraya[100][100];

int BeginningPath()//说明初始化的路由连接信息

{

int i,j,t;

printf("请输入节点的个数:");

scanf("%d",&n);//一共有n个节点

for(i=0;i

{

for(j=i+1;j

{

printf("从第%d个节点到第%d个节点的费用:",i,j);

scanf("%d",&t);

相关文档
最新文档