课程设计RIP协议路由表调整算法

来源:互联网 发布:搜狐邮箱 imap 端口 编辑:程序博客网 时间:2024/05/23 00:04
#include <iostream>#include <fstream>#include <string>#include <sstream>#include <windows.h>using namespace std;class Route{public:string route;string net_r;string net_1;};class Routelists{public:string net;int distance;string next route;};class Network{public:Network();void show();void bgroutes();void change(int i);void change2(int i);void update(int i,int j);void UPDATE();bool neighbor(int i,int j);Routelists rts[20][12];Route rt[20];void save();private:int n,n1;int tiao[20];int s2[20];};Network::Network(){cin>>n;n1=n;for(int j=0;j<20;j++){tiao[j]=0;}for(int tt=0;tt<20;tt++){s2[tt]=0;}ifstream infile("data.txt",ios:in);if(!infile){cerr<<"open error!"<<endl;exit(1);}int i=0;while(n1--){infile>>rt[i].net_1>>rt[i].route>>rt[i].net_r;i++;}infile.close();}void Network::bgroutes(){ofstream outfile("R.txt");if(!outfile){cerr<<"open err.text error!"<<endl;exit(1);}for(int i=0;i<n;i++){rts[i][0].net=rt[i].net_1;rts[i][0].distance=1;rts[i][0].next_route="直接交付";outfile<<rts[i][0].net<<" "<<rts[i][0].distance<<" "<<rts[i][0].next_route<<endl;tiao[i]++;rts[i][1].net=rt[i].net_r;rts[i][1].distance=1;rts[i][1].next_route="直接交付";outfile<<rts[i][1].net<<" "<<rts[i][1].distance<<" "<<rts[i][1].next_route<<endl;tiao[i]++;}outfile.close();}void Network::show(){for(int i=0;i<n;i++){cout<<"       "<<"第"<<i+1<"个路由器"<<endl;for(int j=0;j<tiao[i];j++){cout<<"       "<<rts[i][j].net<<" "<<rts[i][j].distance<<" "<<rts[i][j].next_route<<endl;}cout<<endl;}cout<<endl;cout<<endl;cout<<endl;}void Network::change(int i){for(int j=0;j<tiao[i];j++){rts[19][i].distance=rts[i][j].distance;rts[19][i].next_route=rts[i][j].next_route;rts[i][j].distance=rts[i][j].distance+1;rts[i][j].next_route=rts[i].route;}}void Network:chang2(int i){for(int j=0;j<n;j++){rts[i][j].distance=rts[19][j].distance;rts[i][j].next_route=rts[19][j].next_route;}}void Network::update(int i,int j){int x,y;int s1;bool you=true;for(x=0;x<tiao[i];x++){for(y=0;y<tiao[j];y++){if((rts[i][x].net)!=(rts[j][y].net)){for(int t=0;t<tiao[i];t++){if((rts[i][t].net)==(rts[j][y].net))you=false;}if(you){rts[i][tiao[i]].net=rts[j][y].net;rts[i][tiao[i]].distance=rts[j][y].distance;rts[i][tiao[i]].next_route=rts[j][y].next_route;tioa[i]++;s2[i]++;}}you=true;}}for(x=0;x<tiao[i]-s2[i];x++){for(y=0;y<tiao[i]-s2[i];y++){if((rts[i][x].next_route)==(rts[j][y].next_route)){rts[i][x].net=rts[j][y].net;rts[i][x].distance=rts[j][y].distance;}}}you=true;for(x=0;x<tiao[i]-s2[i];x++){for(y=0;x<tiao[i]-s2[i];y++){if(rts[i][y].net==rts[j][x].net){if(rts[i][y].net<=rts[j][x].distance){you=false;s1=y;}if(you){rts[i][s1].next_route=rts[j][x].next_route;rts[i][s1].distanc=rts[j][x].distance;}you=true;}}}}void Network::UPDATE(){char stop;for(int t=0;t<n-1;t++){for(int j=0;j<n;j++){for(int i=0;i<n;i++){if(neighbor(i,j)){change(i);update(j,i);change2(i);stop=getchar();cout<<"================================================="<<endl;cout<<"        根据第"<<i+1<<"个路由表修改第"<<j+1<<"个路由表,"<<endl;cout<<"================================================="<<endl;for(int x=0;x<n;x++){cout<<"       "<<"第"<<x+1<<"个路由表"<<endl;for(int y=0;y<tiao[x];y++){cout<<"                  "<<rts[x][y].net<<"  "<<rts[x][y].distance<<"  "<<rts[x][y].next_roue<<endl;}cout<<endl;}cout<<endl;cout<<endl;cout<<endl;}}}}}void Network::save(){ofstream outfile3("R1.txt");for(int i=0;i<tioa[i];i++){outfile1<<rts[0][i].net<<" "<<rts[0][i].distance<<" " <<rts[0][i].next_route<<endl;}outfile1.close();ofstream outfile("R2.txt");for(int i=0;i<tioa[i];i++){outfile2<<rts[1][i].net<<" "<<rts[1][i].distance<<" " <<rts[1][i].next_route<<endl;}outfile2.close();ofstream outfile3("R3.txt");for(int i=0;i<tioa[i];i++){outfile1<<rts[0][i].net<<" "<<rts[0][i].distance<<" " <<rts[0][i].next_route<<endl;}outfile3.close();}int main(){Network gfw;gfw.bgroutes();gfw.show();gfw.UPDATE();gfw.show();gfw.save();return 0;}

0 0