一手BellmanFord算法送给大家(感觉应该是最容易写的)
我把自己给坑到了!注意此题是无向图,所以两个方向的边都需要存下!
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
struct node{
ll u,v,w;
};
int main ()
{
int n,m;
cin>>n>>m;
ll u,v,w;
vector<node>graph(m*2); //注意题目是无向图!!!需要存储两个方向的边!
for(int i=0;i<m;i++){
cin>>u>>v>>w;
graph[i] = {u,v,w};
graph[m+i] = {v,u,w};
}
vector<ll>dp(n+5,LLONG_MAX/2);
dp[1] = 0;
for(int i=0;i<n-1;i++){
bool f = true;
for(int j=0;j<2*m;j++){
if(dp[graph[j].v]>dp[graph[j].u]+graph[j].w){
dp[graph[j].v] = dp[graph[j].u]+graph[j].w;
f = false;
}
}
if(f)
break;
}
if(dp[n]==LLONG_MAX/2){
cout<<"qwb baka\n";
}else{
cout<<dp[n];
}
return 0;
}