欢迎来到天天文库
浏览记录
ID:9485060
大小:125.50 KB
页数:12页
时间:2018-05-01
《计算机网络原理实验八实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验八、LinkStatesAlgorithm的实现序号:姓名:学号:成绩指导老师:刘春花,刘宇1.实验目的:通过编程模拟实现LSA.2.实验环境:VS.net软件开发平台,可以使用任何编程语言。3.实验要求(1)求网络中任何两个结点之间的最短路径(网络中至少有4个节点)。(2)得到任何一个节点上的转发表。4.实验分析,回答下列问题(1)给出LSA算法的主要思想。(1)邻居节点发现与测试:各节点主动测试所有与之相邻的节点的状态。方法是周期性的向邻居节点广播简短的查询报文,通过接收邻居节点的响应报文来获取与邻居的状
2、态信息。 (2)链路状态信息发布:根据收集到的状态信息,构造一个包含所有邻居列表在内的分组LS,并通过洪泛法通告给算法作用区域内的所有节点。 (3)路由选择算法:收到LS分组的节点,采用Dijkstra算法,为每个节点选择最短的路径。(2)通过图表算出任何两个节点之间的最短路径,并给出每个节点上的转发表。代码#defineMAX20//图中顶点数的最大值#defineMAXedg30//图中边数的最大值#include#include#include#in
3、cludetypedefintAdjMatrix[MAX][MAX];typedefstruct{intvexs[MAX];AdjMatrixarcs;}MG;//图的矩阵表示法。voidDijkstra(intn,intv,int*RW,int*R,int*MG[]){inti;intj;intmaxint=00000;//定义一个最大的数值,作为不相连的两个节点的代价权值int*s;//定义具有最短路径的节点子集ss=(int*)malloc(sizeof(int)*n);//初始化最小路径
4、代价和前一跳节点值for(i=1;i<=n;i++){RW[i]=MG[v][i];//初始化V对应的的其余点的权重s[i]=0;//现在该点不属于节点子集if(RW[i]==maxint)//初始化会回溯路径{R[i]=0;}else{R[i]=v;}}RW[v]=0;s[v]=1;//源节点作为最初的s子集for(i=1;i5、=j;temp=RW[j];}}s[u]=1;//计算加入新的节点后,更新路径使得其产生代价最短for(j=1;j<=n;j++){if((!s[j])&&(MG[u][j]6、oc(sizeof(int)*(n+1));//回溯路径while(w!=v){count++;way[count]=R[w];w=R[w];}//输出路径printf("最优路径:");for(j=count;j>=1;j--){printf("%d->",way[j]);}printf("%d",u);}voidDijkstra(int,int,int*,int*,int*[]);voidShowPath(int,int,int,int*,int*);voidmain()//主函数{charchoic7、e='x';while(1){system("cls");printf("tt************************************");printf("ttt1.查找两节点间最短路径:");printf("ttt2.退出");printf("tt************************************");printf("Pleaseenteryourchoice(1/2):");choice=getchar();8、switch(choice){case'1':{inti,j,t;intn,v,u;int**MG;//矩阵int*RW;//最短路径代价int*R;//回溯节点printf("请输入结点个数:");scanf("%d",&n);printf("结点之间的链接代价为:");MG=(int**)malloc(sizeof(int)*(n+1));//构建动态存储矩阵fo
5、=j;temp=RW[j];}}s[u]=1;//计算加入新的节点后,更新路径使得其产生代价最短for(j=1;j<=n;j++){if((!s[j])&&(MG[u][j]6、oc(sizeof(int)*(n+1));//回溯路径while(w!=v){count++;way[count]=R[w];w=R[w];}//输出路径printf("最优路径:");for(j=count;j>=1;j--){printf("%d->",way[j]);}printf("%d",u);}voidDijkstra(int,int,int*,int*,int*[]);voidShowPath(int,int,int,int*,int*);voidmain()//主函数{charchoic7、e='x';while(1){system("cls");printf("tt************************************");printf("ttt1.查找两节点间最短路径:");printf("ttt2.退出");printf("tt************************************");printf("Pleaseenteryourchoice(1/2):");choice=getchar();8、switch(choice){case'1':{inti,j,t;intn,v,u;int**MG;//矩阵int*RW;//最短路径代价int*R;//回溯节点printf("请输入结点个数:");scanf("%d",&n);printf("结点之间的链接代价为:");MG=(int**)malloc(sizeof(int)*(n+1));//构建动态存储矩阵fo
6、oc(sizeof(int)*(n+1));//回溯路径while(w!=v){count++;way[count]=R[w];w=R[w];}//输出路径printf("最优路径:");for(j=count;j>=1;j--){printf("%d->",way[j]);}printf("%d",u);}voidDijkstra(int,int,int*,int*,int*[]);voidShowPath(int,int,int,int*,int*);voidmain()//主函数{charchoic
7、e='x';while(1){system("cls");printf("tt************************************");printf("ttt1.查找两节点间最短路径:");printf("ttt2.退出");printf("tt************************************");printf("Pleaseenteryourchoice(1/2):");choice=getchar();
8、switch(choice){case'1':{inti,j,t;intn,v,u;int**MG;//矩阵int*RW;//最短路径代价int*R;//回溯节点printf("请输入结点个数:");scanf("%d",&n);printf("结点之间的链接代价为:");MG=(int**)malloc(sizeof(int)*(n+1));//构建动态存储矩阵fo
此文档下载收益归作者所有