实验八LinkStatesAlgorithm的实现.docVIP

  • 8
  • 0
  • 约3.49千字
  • 约 5页
  • 2015-09-26 发布于重庆
  • 举报
实验八LinkStatesAlgorithm的实现

实验八、Link States Algorithm的实现 序号: 姓名: 学号: 成绩 指导教师 1.实验目的: 通过编程模拟实现LSA. 2.实验环境: VS.net软件开发平台,可以使用任何编程语言。 3.实验要求 (1)求网络中任何两个结点之间的最短路径(网络中至少有4个节点)。 (2)得到任何一个节点上的转发表。 4.实验分析,回答下列问题 (1)给出LSA算法的主要思想。 ①邻居节点发现与测试:各节点主动测试所有与之相邻的节点的状态。方法是 周期性的向邻 居节点广播简短的查询报文,通过接收邻居节点的响应报文 来获取与邻居的状态信息。? ②链路状态信息发布:根据收集到的状态信息,构造一个包含所有邻居列表在 内的分组LS,并通过洪泛法通告给算法作用区域内的所有节点。? ③路由选择算法:收到LS分组的节点,采用Dijkstra算法,为每个节点选择 最短的路径。 (2)通过图表算出任何两个节点之间的最短路径,并给出每个节点上的转发表。 代码: #includestdio.h #include malloc.h void D(int ,int ,int *,int *,int * []);//dijkstra算法 void p(int ,int ,int ,int *,int *);//输出结果 void main() { int i,j,t; int n,v,u; int **MGraph; //矩阵 int *RoutWeight; //最短路径代价 int *Rout; //回溯节点 while(1){ printf(结点的个数为: ); scanf(%d,n); printf(输入邻接矩阵:\n); MGraph=(int **)malloc(sizeof(int)*(n+1)); //构建动态存储矩阵 for (i = 1; i = n; i++) { MGraph[i]=(int *)malloc(sizeof(int)*(n+1)); } for (j = 1; j = n; j++) //输入代价矩阵 { for (t = 1; t = n; t++) { scanf(%d,MGraph[j][t]); } } RoutWeight = (int *)malloc(sizeof(int)*n); Rout = (int *)malloc(sizeof(int)*n); printf(你输入的源节点:); scanf(%d,v); D(n, v, RoutWeight, Rout, MGraph); //调用dijkstra算法 for(i = 1; i = n ; i++) { if(i!=v) { printf(从%d 到%d 的路径距离是%d\n,v,i,RoutWeight[i]); p(n,v,i, RoutWeight, Rout); } } } } void D(int n,int v,int *RoutWeight,int *Rout,int *MGraph[]) { int i; int j; int maxint =0;//定义一个最大的数值,作为不相连的两个节点的代价权值 int *s ; //定义具有最短路径的节点子集s s = (int *)malloc(sizeof(int) * n); //初始化最小路径代价和前一跳节点值 for (i = 1; i = n; i++) { RoutWeight[i] = MGraph[v][i]; //初始化V对应的的其余点的权重 s[i] = 0;

文档评论(0)

1亿VIP精品文档

相关文档