zoukankan      html  css  js  c++  java
  • 计算机网络透明网桥算法时间戳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();
    	}
    }

      

     

  • 相关阅读:
    MySQL主键和外键使用及说明
    SQLAlchemy
    路飞学城购买流程API
    路飞学城知识点
    使用rest_framework写api接口的一些注意事项(axios发送ajax请求)
    微信推送功能
    支付宝支付业务
    路飞学城前端Vue
    Python爬虫,用第三方库解决下载网页中文本的问题
    Python爬虫,抓取淘宝商品评论内容
  • 原文地址:https://www.cnblogs.com/tao7/p/10603142.html
Copyright © 2011-2022 走看看