20分,求助,呜呜呜
查看原帖
20分,求助,呜呜呜
609446
mswen楼主2023/9/30 21:10

20分,求助,呜呜呜

#include<bits/stdc++.h>
using namespace std;
//int a[10010][10010]; 
// 用
vector<int> a[100001];

vector<int> b;
vector<int> res;
bool trace[100001]={0},traceb[100001]={0}; //标记数组
void print(vector<int>& t){
	for(int i : t){
		cout<<i<<" ";
	}
	cout<<endl;
}
// 深度优先 
void dfs(int be,int n){
	if(trace[be] == 0){
		trace[be] = 1;
		cout<<be<<" ";
//		res.push_back(be);
	}else{
		return;
	}
	
	// 找到be相连的节点 
	vector<int> temp;
	for(int i=1;i<=n;i++){
		if(trace[i] == 0 && a[be].size() != 0){
			for(int t : a[be]){
				if(t == i){
					temp.push_back(i);
				}
			}
			
		}
	}
	// 排序 
	sort(temp.begin(),temp.end());
	for(int i : temp){
		dfs(i,n);
	} 
	
}

// 广度优先
vector<int> bres;
vector<int> v;
void pushv(int i){
	v.insert(v.begin(),i); 
//	bres.push_back(i);
	cout<<i<<" ";
} 
void bfs(int be,int n){

	traceb[be] = 1;
	pushv(be);

	
	while(v.size() != 0){
		vector<int> temp;
		int val = v.back(); v.pop_back();
		for(int i=1;i<=n;i++){
			if(traceb[i] == 0 && a[val].size() != 0){
				for(int t : a[val]){
					if(t == i){
						temp.push_back(i);
						traceb[i] = 1;
					}
				}
			}
		}
		sort(temp.begin(),temp.end());
		for(int j:temp){
			pushv(j);
		}
	}
}


int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
//	vector<int> trace(n+1,0);
 	int c,d;
	for(int i=0;i<m;i++){
		scanf("%d%d",&c,&d);
		a[c].push_back(d);
//		a[c][d] = 1;
	} 
	
	dfs(1,n);
	cout<<endl;
//	print(res);
//	vector<int> traceb(n+1,0);
	bfs(1,n);
//	print(bres);
	return 0;
}


2023/9/30 21:10
加载中...