畅通工程续
第一个Dijkstra,呵呵,纪念下
// File Name: hdu1874.cpp
// Author: rudolf
// Created Time: 2013年04月27日 星期六 16时06分12秒
#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
using namespace std;
const int maxnum = 210 ;
const int maxint = 99999 ;
int dist[ maxnum ];
int c[ maxnum ][ maxnum ];
int n;
void Dijkstra( int v )
{
int i,j,u;
bool s[ maxnum ] ;
for( i = 0 ; i < n; i++ )
{
dist[ i ] = c[ v ][ i ];
s[ i ] = false ;
}
dist[ v ] = 0;
s[ v ] = true ;
for( i = 0 ; i < n ; i++ )
{
int tmp = maxint ;
for( j = 0 ; j < n ; j++ )
{
if( !s[ j ] && dist[j] < tmp )
{
u = j ;
tmp = dist[ j ];
}
}
s[ u ] = true ;
for( j = 0 ; j < n ; j++ )
{
if( !s[ j ] && dist [j] > dist [ u ] + c[ u ][ j ])
dist[ j ] = dist[ u ] + c[ u ][ j ];
}
}
}
int main()
{
// int x,y,velue,i,j;
int i,j;
int x,y,value;
// int be,end,m;
int m;
while( cin >> n >> m )
{
for( i = 0 ; i < n ; i++ )
for( j = 0 ; j < n ; j++ )
c[ i ][ j ] = maxint ;
for( i = 0 ; i < m ; i++ )
{
int x,y,value;
cin >> x >> y >> value;
if( value < c[ x ][ y ])
{
c[ x ][ y ] = value ;
c[ y ][ x ] = value ;
}
}
int be,en;
cin >> be >> en ;
for( i = 0 ; i < n ; ++i )
dist[ i ] = maxint ;
Dijkstra( be );
if( dist[ en ] == maxint )
cout<< "-1" <<endl ;
else
cout<< dist[ en ] << endl ;
}
return 0;
}