信息学奥赛一本通在线测评系统:1382:最短路(Spfa) 代码为什么会运行超时?

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int MAXN = 0x3f3f3f3f; 
int n,m; 
int source,end;
struct edge{
	int to,wight;
	int pre;
}e[3200000]; 

int vertex[320000];
int d[250000];
bool flag[250000];

int cnt = 0;
void add(int v,int u,int w){
	e[++cnt].to = u;
	e[cnt].wight = w;
	e[cnt].pre = vertex[v];
	vertex[v] = cnt;
}

void printGraph(int n){
	for(int i=1;i<=n;i++){
		int index = vertex[i];
		cout<<i<<':';
		while( index ){
			edge newEdge = e[index];
			cout<<newEdge.to<<' ';
			index = newEdge.pre;
		}
		cout<<endl;
	}
}



void spfa(int n){
	queue<int> que;
	que.push(source);
	flag[source] = 1;
	while(!que.empty()){
		int v = que.front();
		flag[v] = 0;
		que.pop();			
		for(int i=vertex[v];i;i=e[i].pre){
			int to = e[i].to;
			int w = e[i].wight;
			if( d[v] + w < d[to] ){
				d[to]  = d[v] + w ;
				if( !flag[to]){
					que.push(to);
					flag[to] = 1;			
				}
			}			
		}
	}
}

int main(){
	cin>>n>>m;
	int v,u,w;
	for(int i=0;i<m;i++){
		cin>>v>>u>>w;
		add(v,u,w);
		add(u,v,w);
	}
	source=1;end=n;
	fill(d,d+100005,MAXN);
	d[source] = 0;
	spfa(n);
	cout<<d[n]<<endl;
	return 0;
}

 

是超时完成,还是超时都没有完成,像死机或死循环一样呢?

不小心自己评论自己了,咋删除?

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632