資源簡介
編程實現簡單網絡拓撲的鏈路狀態路由算法。
結點之間的連接關系固定;
鏈路開銷可以由用戶設定。
鏈路狀態算法的實現:
代碼片段和文件信息
//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的網絡流量監視系統
- 下一篇:軟件測試實驗報告——三角形問題
評論
共有 條評論