http://poj.org/problem?id=2387
使用bellman_ford解决最短路问题。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int V,E,num,dis[1010];
struct edge{
int from;
int to;
int v;
}node[2010 << 1];
void bellman_ford(int scr){
for(int i=1; i<=V; i++)
dis[i] = 1e9;
dis[scr] = 0;
bool flag;
for(int i=0; i<V-1; i++){
flag = false;
for(int j=1; j<=num; j++){
if(dis[node[j].to] > dis[node[j].from] + node[j].v){
dis[node[j].to] = dis[node[j].from] + node[j].v;
flag = true;
}
}
if(!flag) break;
}
}
int main(){
// freopen("in.txt", "r", stdin);
num = 0;
scanf("%d%d",&E,&V);
int a,b,c;
for(int i=0; i<E; i++){
scanf("%d%d%d",&a,&b,&c);
num++;
node[num].from = a;
node[num].to = b;
node[num].v = c;
num++;
node[num].from = b;
node[num].to = a;
node[num].v = c;
}
bellman_ford(V);
printf("%d\n",dis[1]);
return 0;
}