题解:
bellman-ford算法简单应用
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn=30000+10;
struct node{
int v,w;
};
vector<node> a[maxn];
int dist[maxn];
int n,m;
void insert(int u,int v,int w)
{
node t;
t.v=v;
t.w=w;
a[u].push_back(t);
t.v=u;
a[v].push_back(t);
}
void readdata()
{
scanf("%d%d",&n,&m);
int u,v,w;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
insert(u,v,w);
}
}
void bellmanford()
{
memset(dist,0x3f,sizeof(dist));
dist[1]=0;
bool flag=true;
while(flag)
{
flag=false;
for(int x=1;x<=n;x++)
{
for(int j=0;j<a[x].size();j++)
{
int v=a[x][j].v;
int w=a[x][j].w;
if(dist[x]+w<dist[v])
{
dist[v]=dist[x]+w;
flag=true;
}
}
}
}
printf("%d\n",dist[n]);
}
int main()
{
readdata();
bellmanford();
return 0;
}