资源简介
编程实现简单网络拓扑的链路状态路由算法。
结点之间的连接关系固定;
链路开销可以由用户设定。
链路状态算法的实现:
代码片段和文件信息
//VC++
#include //可以不写
#include //文件输入输出头文件
#include //防止编译exit()时出错
#include // 因为使用了setw()语句
#include
using namespace std;
const int INFINITY=10000;
const int OK=1;
const int updateTime=10;
void createGraph(int *arcs[]int & num){
//创建并初始化网络拓扑图
cout<<“请输入路径的权值(用邻接矩阵表示拓扑图的方式):“< for (int i=0;i arcs[i]=new int [num];
for(int j=0;j cin>>arcs[i][j];
}
}
void printFileGraph(int *arcs[]int num){
//把拓扑图中的邻接矩阵保存到文件中
ofstream outfile(“Graph.txt“ios::out|ios::trunc);
if(! outfile){
cout<<“打开文件时出现错误!“< exit(1);//退出程序
}
outfile<<“拓扑图的邻接矩阵“< for(int i=0;i for(int j=0;j outfile< if((j+1)%num==0)
outfile< }
outfile<<“注:“< outfile< cout<<“拓扑图已经存储在当前目录下Graph.txt文件中“< outfile.close();
}
void initRoute(int * R []int RL[]int vNum){
//路由表数据复位
for(int i=0;i RL[i]=INFINITY;
R[i]=new int[vNum];
for(int j=0;j R[i][j]=-1;
}//outside for
}//initRoute
void updateRouteLen(int R1[] int R2[]int destint num){
//用路径R2给R1赋值
for(int i=0;i R1[i]=R2[i];
for(int j=0;j if (R1[j]==-1){
R1[j]=dest;
break;
}
}//for
}//updateRoute
void Dijkstra(int * arcs[]int * R[]int RL[]int vexnum){
//迪杰斯特拉算法
int v0; //定义源节点
bool * visit=new bool [vexnum];//已经确定最短路径的节点的集合
cout<<“请输入起始节点:“;
cin>>v0;
cout<
for(int cnt=0;cnt visit[cnt]=FALSE;
RL[cnt]=arcs[v0][cnt];
if(RL[cnt] R[cnt][0]=v0;
R[cnt][1]=cnt;
}
} //for
RL[v0]=0;//源节点的标志
visit[v0]=TRUE; //初始化已经找到最短路径的点集合
for(int i=1;i int min=INFINITY;
int v=v0;
for(int j=0;j if(!visit[j])
if(RL[j] v=j;
min=RL[j];
}
visit[v]=TRUE; //离v0顶点最近的v加入到s集
for(int k=0;k if(!visit[k]&&(min+arcs[v][k] //modify shortest r[j] and RL[j]
RL[k]=min+arcs[v][k];
updateRouteLen(R[k]R[v]kvexnum);
}//if
}//for
delete[] visit;
visit=NULL;
}//Dijkstra
void printRoute(int * R[]int RL[] int vNum){
//打印得到的最短路径表
ofstream outfile(“Route.txt“ios::out|ios::trunc);
if(! outfile){
cout<<“打开文件时出现错误!“< exit(1);
}
for(int dest=0;dest
- 上一篇:基于SNMP的网络流量监视系统
- 下一篇:软件测试实验报告——三角形问题
评论
共有 条评论