计算机网络透明网桥算法时间戳c++

要交CG的兄弟们别抄啊,撞上了严nan谁都不会放过的

好久没写博客了,这次是老师布置的作业,做出来一种,觉得写得很不好,第一种方法把情况都写死在代码里了。

上代码

#include<iostream>
#include<map>
using namespace std;
int main(){
	map<char,int>mp1;
	map<char,int>mp2;
	while(true){
		cout<<"请输入源站点、目标站点、1号站接收的接口和2号站接收的接口以空格隔开"<<endl;
	char destinatios,source;
	int inport1,inport2;
	cin>>source>>destinatios>>inport1>>inport2;
	mp1[source]=inport1;
	mp2[source]=inport2;
	if(mp1[destinatios]==0&&mp2[destinatios]==0){
		cout<<"查表失败,向所有站点广告"<<endl; 
		continue;
	}
	if(inport1==mp1[destinatios]){
		cout<<"站点1不需要转发!"<<endl;
		continue;
		mp1[source]=inport1; 
	}else cout<<"站点1要转发!"<<endl;
	if(inport2==mp2[destinatios]){
		cout<<"站点2不需要转发!"<<endl;
		mp2[source]=inport2;
		continue; 
	}else cout<<"站点2要转发!"<<endl;
	}
	return 0;
}

  

第二种就较友好点,我把网桥的数量可以自定义,我认为这样才是真正的实现了学习的需求

上代码

#include<iostream>
#include<map>
#include<vector>
using namespace std;
int main(){
	int n;
	cout<<"请输入桥数,默认从左到右为0 1 2 n-1"<<endl;
	cout<<"请输入源站点左右桥号、起始位置、目标位置。"<<endl;
	cout<<"假设网络的两个端点都是网桥,即所有源站点均在两个网桥中间"<<endl; 
	cin>>n;//桥数
	vector<map<char,int> >v(n);
	while(true){
	char destinatios,source; 
	int start1,start2;
	cin>>start1>>start2>>source>>destinatios;
	int f=0;
	if(v[start1][destinatios]==0&&v[start2][destinatios]==0){
		cout<<"-----------查找失败!向所有站点广播-----------"<<endl;
		for(int i=0;i<=start1;i++)
			v[i][source]=2;
		for(int i=start2;i<n;i++)
			v[i][source]=1;
		continue; 
	}
	if(v[start1][destinatios]==2){
		cout<<"-----------"<<start1<<"号站点不需要转发-----------"<<endl;
		f=1;
	}
	if(v[start2][destinatios]==1){
		cout<<"-----------"<<start2<<"号站点不需要转发-----------"<<endl;
		if(f==1){
			cout<<"-----------目标站点就在"<<start1<<"和"<<start2<<"之间-----------"<<endl; 
			continue;
		}
	}
	if(v[start1][destinatios]==1){
		while(v[start1][destinatios]==1){
		cout<<"-----------"<<start1<<"号站点已向左转发-----------"<<endl; 
		v[start1][source]=2;
		start1--;
		}
		continue;
	}
	if(v[start2][destinatios]==1){
		while(v[start2][destinatios]==1){
		cout<<"-----------"<<start2<<"号站点已向右转发-----------"<<endl; 
		v[start2][source]=1;
		start2--;
		}
		continue;
	}	
	}
}

  

  

 

接下来做的是要加上时间戳,我对时间函数的调用不是很熟悉,就只是实现了这个功能,没有追求精确无误,功能没有问题,但是不是严格得按照打印输出一样显示超过五秒就删除

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <time.h>
#include<iostream>
#include<map>
#include<vector>
#include<time.h>
using namespace std;
int n;
vector<map<char,int> >v(100);
vector<map<char,int> >shijian(100);
void ff(){
	for(int k=0;k<n;k++){
			for(map<char,int>::iterator it=shijian[k].begin();it!=shijian[k].end();it++){
				clock_t start;
				start = clock(); 
				char sou=it->first;
				if(start-it->second-shijian[k][sou]>5*60){
					v[k][sou]=0;
					cout<<sou<<"在"<<k<<"号站点的时间大于5秒,记录已被清除"<<endl;
				}
			}		
		}
}
int main(){
	
	cin>>n;
	
	while(true){	
	clock_t start;
	char des,sou;
	int start1,start2;
	cin>>start1>>start2>>sou>>des;
	int f=0;
	if(v[start1][des]==0&&v[start2][des]==0){
	cout<<"查找失败,向所有人广播!"<<endl;
	for(int i=0;i<=start1;i++){
		v[i][sou]=2;
		start = clock();  
		shijian[i][sou]=start;
		cout<<i<<"号站点"<<sou<<"的最新时间是"<<shijian[i][sou]<<endl;
	}
	for(int j=start2;j<n;j++){
		v[j][sou]=1;
		start = clock();
		shijian[j][sou]=start;
		cout<<j<<"号站点"<<sou<<"的最新时间是"<<shijian[j][sou]<<endl;
	}
	ff();
	continue;
	}
	if(v[start1][des]==2){
	cout<<"-------------"<<start1<<"号站点不需要转发----------"<<endl;
	f=1;
	}
	if(v[start2][des]==1){
	cout<<"------------"<<start2<<"号站点不需要转发------------"<<endl;
	if(f==1){
	cout<<"------------目标站点就在"<<start1<<"和"<<start2<<"之间----------"<<endl;
	ff();
	continue;
	}
	}
	if(v[start1][des]==1){
		while(v[start1][des]==1){
		cout<<"----------"<<start1<<"号站点已向左转发---------"<<endl;
		v[start1][sou]=2;
		start = clock();
		shijian[start1][sou]=start;
		cout<<start1<<"号站点"<<sou<<"的最新时间是"<<shijian[start1][sou]<<endl;
		start1--;
		}
		ff();
		continue;
	}
		if(v[start2][des]==1){
		while(v[start2][des]==1){
		cout<<"----------"<<start2<<"号站点已向右转发---------"<<endl;
		v[start2][sou]=1;
		start = clock();
		shijian[start2][sou]=start;
		cout<<start2<<"号站点"<<sou<<"的最新时间是"<<shijian[start2][sou]<<endl;
		start2--;
		}
		ff();
		continue;
	}
		ff();
	}
}

  

 

原文地址:https://www.cnblogs.com/tao7/p/10603142.html