HDOJ 1874
2014-04-30 18:35
239 查看
#include<stdio.h> #include<string.h> int map[205][205],dist[205]; int vis[205],n,m,s,t,s; void init1() { int i,j; memset(vis,0,sizeof(vis)); for(i = 0;i < n;i ++) { for(j = 0;j < n;j ++) { if(i != j) map[i][j] = 1 << 30; else map[i][j] = 0; } } return ; } void init2() { int i; for(i = 0;i < n;i ++) dist[i] = map[s][i]; return ; } void Dijkstra() { int i,j,k,min; vis[s] = 1; for(i = 0;i < n;i ++) { min = 1 << 30; k = -1; for(j = 0;j < n;j ++) { if(!vis[j] && dist[j] < min) { min = dist[j]; k = j; } } if(k == -1) return ; vis[k] = 1; for(j = 0;j < n;j ++) { if(!vis[j] && dist[j] > map[k][j]+dist[k]) dist[j] = map[k][j]+dist[k]; } } return ; } int main(void) { int i,j; int a,b,x; while(~scanf("%d%d",&n,&m)) { init1(); while(m--) { scanf("%d%d%d",&a,&b,&x); if(map[a][b] > x) map[a][b] = map[b][a] = x; } scanf("%d%d",&s,&t); init2(); Dijkstra(); if(dist[t] != 1 << 30) printf("%d\n",dist[t]); else printf("-1\n"); } return 0; }