计算机网络路由算法以及LS算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);