#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;
}
课程设计RIP协议路由表调整算法
最新推荐文章于 2024-02-01 22:31:27 发布