第二个点超时,大佬帮帮忙(SPFA)
查看原帖
第二个点超时,大佬帮帮忙(SPFA)
26314
hecien楼主2023/3/19 10:33
#include <bits/stdc++.h>
using namespace std;
const int maxn=10007;
int n,m,s,t;
struct lol{
	int next;
	int to;
	int v;
}edge[maxn];
int cnt=1,head[maxn];
int dist[maxn];
bool vis[maxn];
void add_edge(int x,int y,int w){
	edge[cnt].to=y;
	edge[cnt].v=w;
	edge[cnt].next=head[x];
	head[x]=cnt++;
}
int main(){
	cin>>n>>m>>s>>t;
	for(int i=1;i<=n;++i){
		vis[i]=0;
		dist[i]=1e6;
	}
	for(int i=1;i<=m;++i){
		int x,y,z;
		cin>>x>>y>>z;
		add_edge(x,y,z);
		add_edge(y,x,z);
	}
	dist[s]=0;vis[s]=1;
	queue<int>q;
	q.push(s);
	while(!q.empty()){
		int w;
		w=q.front();
		q.pop();
		vis[w]=0;
		for(int i=head[w];i;i=edge[i].next){
			int e,z;
			e=edge[i].to;
			z=edge[i].v;
			if(dist[e]>dist[w]+z){
				dist[e]=dist[w]+z;
				if(vis[e]==0){
					q.push(e);
					vis[e]=1;
				}
			}
		}
	}
	cout<<dist[t]<<endl;
	return 0;
}
2023/3/19 10:33
加载中...