链路状态路由算法Word文档下载推荐.docx
- 文档编号:16098021
- 上传时间:2022-11-19
- 格式:DOCX
- 页数:9
- 大小:71.85KB
链路状态路由算法Word文档下载推荐.docx
《链路状态路由算法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《链路状态路由算法Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
constintMAX_NODES=1024;
//能接受的最大路由数
constintINFINITY=100000;
//权值
intdist[MAX_NODES][MAX_NODES];
//用于存放网络拓扑结构连接矩阵
intstaticVnums;
//总的节点(路由)数
voidinitDist(){
//初始化邻接矩阵
for(inti=0;
i<
MAX_NODES;
i++)
for(intj=0;
j<
j++)
dist[i][j]=0;
}
voidcreatRouteMap(intVnums){
//创建网络拓扑结构的邻接矩阵,1.创建路由表函数
Vnums;
{
cout<
<
"
输入第"
<
个节点\n"
;
{
"
的第"
个节点的权值:
cin>
>
dist[i][j];
}
voidsaveRoute(ofstream&
routeTables){
//6.保存路由信息
routeTables<
路由邻接矩阵为:
;
\n"
**********************************"
routeTables<
dist[i][j]<
\t"
voiddijkstra(ints,intt,intpath[]){
//迪杰斯特拉算法s目的节点t源节点
structstate{
//存放节点数据
intpredecessor;
//父节点
intlength;
//权值,存放最小权值
bool
lable;
//访问状态false未被访问过,true访问过
}state[MAX_NODES];
inti,k,min,print;
structstate*p;
for(p=&
state[0];
p<
&
state[Vnums];
p++)
//初始化节点数据
p->
predecessor=-1;
//类似存下一跳
length=INFINITY;
//=100000
lable=false;
state[t].length=0;
//源节点的权值改为0
state[t].lable=true;
k=t;
最短路径为:
endl;
do{
//dowhile先是把所有最短路径连起来
for(i=0;
i++)
//找到与永久标定节点直接相连的节点,并改变其权值
if((dist[k][i]!
=0)&
&
(state[i].lable==false))
{
//与源节点直接相连并且不是同一个源节点k源节点
if(state[k].length+dist[k][i]<
state[i].length)
state[i].predecessor=k;
//记录节点
k<
->
state[i].length=state[k].length+dist[k][i];
//路径长度总和
k=0;
min=INFINITY;
for(i=0;
//找到与永久标定节点相邻的节点,并把与最小权值的相邻点改为永久标点
if((state[i].lable==false)&
(state[i].length<
min))
//找到与永久标点相邻的节点
min=state[i].length;
k=i;
state[k].lable=true;
//新的永久标点也变为访问过
}while(k!
=s);
//新的永久标点是否为目的节点,不是继续循环
s<
最小距离="
min<
voidaddRoute(){
//添加一个路由及结点信息2.增加路由
charch;
do{
添加一个路由:
Vnums=Vnums+1;
Vnums-1<
个节点与第"
dist[Vnums-1][j];
//写入对应增加行的信息
dist[j][Vnums-1]=dist[Vnums-1][j];
//写入对应增加列的信息
继续添加(y或者n):
ch;
if(ch=='
n'
)break;
}while(ch=='
y'
);
voiddeleteRoute(){
//3.删除路由
intdelNum;
输入删除路由结点号:
delNum;
dist[delNum-1][j]=0;
//对应行的信息
dist[j][delNum-1]=dist[delNum-1][j];
//对应列的信息
继续删除(y或者n):
voidchangeRoute(){
//4.修改路由
inti,j;
输入要修改的结点1:
endl;
i;
输入要修改的结点2:
j;
输入修改的权值:
dist[i-1][j-1];
voiddisplayRouteInfo(){
//7.显示路由表信息
路由表信息:
cout<
for(intj=0;
j<
Vnums;
j++)
(char)(j+65);
//显示ABC..的对应数字为012..
(目的节点)\n"
intc=i+65;
(char)c<
dist[i][j]<
intmain(){
intdesNode,rouNode;
intpath[MAX_NODES];
intchange;
ofstreamrouteTables;
//初始化权值矩阵
initDist();
输入路由总节点数:
//主菜单界面
============================="
1.创建路由表"
2.增加路由"
3.删除路由"
4.修改路由"
5.找两个路由间的最短路径"
6.保存路由表到文件"
7.显示路由表信息"
8.退出"
//
cout<
cin>
选择操作(1-8):
change;
switch(change)
case1:
creatRouteMap(Vnums);
system("
pause"
cls"
break;
case2:
addRout
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 状态 路由 算法