HDOJ 1874開通工事続(最短)
1246 ワード
タイトルリンク:~(̄▽̄~)(~̄▽̄)~
最短の問題だまたˋ^ˊ... 重さを判断して言わないで、意外にもテストの中で自分が自分の路
code:
最短の問題だまたˋ^ˊ... 重さを判断して言わないで、意外にもテストの中で自分が自分の路
code:
#include <stdio.h>
#define Max 0x7fffffff
int map[202][202], dis[202], used[202], n = 0, m = 0, s = 0, t = 0;
void dijkstar()
{
int i = 0, j = 0, k = 0, min = 0;
used[s] = 1;
for(i = 0; i<n; i++)
dis[i] = map[s][i];
for(i = 0; i<n-1; i++)
{
min = Max;
for(j = 0; j<n; j++)
if(!used[j] && min>dis[j])
{
k = j;
min = dis[j];
}
used[k] = 1;
for(j = 0; j<n; j++)
if(!used[j] && map[k][j] != Max)
{
if(dis[j]>dis[k]+map[k][j])
dis[j] = dis[k]+map[k][j];
}
}
}
int main()
{
int i = 0, j = 0, a = 0, b = 0, time = 0;
while(scanf("%d %d",&n,&m) != EOF)
{
for(i = 0; i<n; i++)
{
for(j = 0; j<n; j++)
map[i][j] = Max;
dis[i] = Max;
used[i] = 0;
}
while(m--)
{
scanf("%d %d %d",&a,&b,&time);
if(map[a][b]>time)
map[a][b] = map[b][a] = time;
}
scanf("%d %d",&s,&t);
if(s == t)
printf("0
");
else
{
dijkstar();
if(dis[t] != Max)
printf("%d
",dis[t]);
else
printf("-1
");
}
}
return 0;
}