全TLE求帮
查看原帖
全TLE求帮
1108111
XYY62012楼主2024/6/30 14:08

帮忙看看代码哪些地方可以优化

#include<bits/stdc++.h>
using namespace std;
vector<int> g[5600006];
int vis[5600006];
int n,m,x,y;
void dfs(int u,int v){//u是起点,v表示已经遍历的结点个数 
	cout<<u<<" ";
	vis[u]=1;//标记已被访问过 
	if(v==n) return;//如果遍历完就返回 
	for(int i=0;i<g[u].size();i++){
		int k=g[u][i];
		if(!vis[k])/*如果此结点没被遍历*/ dfs(k,v+1);//继续搜索 
	} 
}	
queue<int> que;
void bfs(int q){
	
	vis[q]=1;//标记已被遍历
	que.push(q);//此结点入队
	while(!que.empty()){
		int w=que.front();
		que.pop();//保存之后出队
		cout<<w<<" ";//输出
		for(int i=0;i<g[w].size();i++){
			int h=g[w][i];
			if(!vis[h]){
				vis[h]=1;//标记已被遍历 
				que.push(h);//入队 
			}
		} 
	} 
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		g[x].push_back(y);//存储x文章有文献y 
	}
	for(int i=1;i<=n;i++){
		sort(g[i].begin(),g[i].end());
		//把与i有联系的数据排序(题目要求从小到大) 
	}
	dfs(1,0);
	cout<<endl;
	memset(vis,0,sizeof(vis));//清空vis(深搜里已经用了一次) 
	bfs(1);
	return 0;
}
2024/6/30 14:08
加载中...