- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验八、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对应的的其余点的权重
文档评论(0)