畅通工程续Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 69942 Accepted Submission(s): 27056 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。
Input 本题目包含多组数据,请处理到文件结束。
Output 对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.
Sample Input 3 3 0 1 1 0 2 3 1 2 1 0 2 3 1 0 1 1 1 2
Sample Output 2 -1
Author linle
Source
Recommend |
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string.h>
#define inf 0x3f3f3f3f
using namespace std;
struct kk
{
int s,e,w;
} a[10001];
int map[2001][2001];
void Floyid(int s,int e,int n)
{
for(int k=0; k<n; k++)
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
}
int main()
{
int n,m,i,j,t,s,e;
while(~scanf("%d%d",&n,&m))
{
memset(map,inf,sizeof(map));
for(i=0; i<m; i++)
{
scanf("%d %d%d",&a[i].s,&a[i].e,&a[i].w);
if(a[i].w<map[a[i].s][a[i].e])
map[a[i].s][a[i].e]=map[a[i].e][a[i].s]=a[i].w;
map[i][i]=0;
}
scanf("%d%d",&s,&e);
Floyid(s,e,n);
if(map[s][e]==inf)
cout<<-1<<endl;
else
cout<<map[s][e]<<endl;
}
return 0;
}