原题链接: http://poj.org/problem?id=2387

测试样例
Sample Input
 5 5
 1 2 20
 2 3 30
 3 4 20
 4 5 20
 1 5 100
 Sample Output
 90
Hint
INPUT DETAILS:
 There are five landmarks.
 OUTPUT DETAILS:
 Bessie can get home by following trails 4, 3, 2, and 1.
题意: 求1到n的最短路径。
解题思路: 单源点最短路径问题,所以我们使用Floyd算法肯定会超时(但我比赛的时候还是信仰的交了一发哈哈),在此题中我们需要使用Dijkstra算法解决,相当于一道模板题,值得注意的是这题有重边,我们需要取最优边。如果你对Dijkstra算法还不太熟悉,这里指路一篇blog:Dijstra算法详解
AC代码
/*
*
*/
//POJ不支持
using namespace std;
const int inf=0x3f3f3f3f;//无穷大。
const int maxn=1010;//限定值。
typedef long long ll;
int t,n;
int graph[maxn][maxn];
int dis[maxn];
bool vis[maxn];
void dijstra(){
  memset(vis,false,sizeof(vis));
  vis[1]=true;
  rep(i,1,n){
    dis[i]=graph[1][i];
  }
  int pos,minn;
  pos=1;
  rep(i,1,n-1){
    minn=inf;
    rep(j,1,n){
      if(dis[j]<minn&&!vis[j]){
        minn=dis[j];
        pos=j;
      }
    }
    vis[pos]=true;
    rep(j,1,n){
      if(!vis[j]&&dis[j]>dis[pos]+graph[pos][j]){
        dis[j]=dis[pos]+graph[pos][j];
      }
    }
  }
  cout<<dis[n]<<endl;
}
int main(){
  while(cin>>t>>n){
    memset(graph,inf,sizeof(graph));
    int u,v,w;
    while(t--){
      cin>>u>>v>>w;
      if(w<graph[u][v]){
        graph[u][v]=graph[v][u]=w;
      }
    }
    dijstra();
  }
  return 0;
}                
                









