spfa求助
查看原帖
spfa求助
598875
nikodo楼主2023/12/13 20:24
#include<bits/stdc++.h>
using namespace std;
int n,m,s,t;
vector<int> v[2505],c[2505];
int val[2505];//要走多长的路
bool vis[2505];//是否在队列里
int main(){
	cin>>n>>m>>s>>t;
	while(m--){
		int x,y,z;
		cin>>x>>y>>z;
		v[x].push_back(y);
		c[x].push_back(z);
	}
	for(int i=1;i<=n;i++)val[i]=1000000000;
	queue<int> q;
	q.push(s);
	val[s]=0;
	while(!q.empty()){
		int now=q.front();q.pop();
		vis[now]=0;
		for(int i=0;i<v[now].size();i++){
			if(val[now]+c[now][i]<val[v[now][i]]){//如果新的值小于旧的值,更新
				val[v[now][i]]=val[now]+c[now][i];
				if(!vis[v[now][i]]){//如果在队列里就不用再存一次
					q.push(v[now][i]);
					vis[v[now][i]]=1;
				}
			}
		}
	}
	cout<<val[t];
	return 0;
}
2023/12/13 20:24
加载中...