标签:des c style class blog code
6 xiasha westlake xiasha station 60 xiasha ShoppingCenterofHangZhou 30 station westlake 20 ShoppingCenterofHangZhou supermarket 10 xiasha supermarket 50 supermarket westlake 10 -1
50 Hint: The best route is: xiasha->ShoppingCenterofHangZhou->supermarket->westlake 虽然偶尔会迷路,但是因为有了你的帮助 **和**从此还是过上了幸福的生活。 ――全剧终――
最短路算法,比较坑的是竟然是双向边,且起点和终点可能重合。不过,没有重边。
#include"stdio.h"
#include"string.h"
#define N 155
#define M 35
const int inf=10000000;
int g[N][N];
int min(int a,int b)
{
return a<b?a:b;
}
void dijkstra(int s,int e,int n)
{
int i,index,min;
int mark[N],dis[N];
memset(mark,0,sizeof(mark));
mark[s]=1;
for(i=0;i<n;i++)
dis[i]=g[s][i];
while(1)
{
index=-1;
min=inf;
for(i=0;i<n;i++)
{
if(!mark[i]&&min>dis[i])
{
index=i;
min=dis[i];
}
}
if(index==-1||index==e)
break;
mark[index]=1;
for(i=0;i<n;i++)
{
if(!mark[i]&&dis[i]>dis[index]+g[index][i])
{
dis[i]=dis[index]+g[index][i];
}
}
}
if(dis[e]<inf)
printf("%d\n",dis[e]);
else
printf("-1\n");
}
int main()
{
int i,j,t,n,m;
char str[N][M],s[M],e[M];
while(scanf("%d",&n),n!=-1)
{
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
g[i][j]=inf;
}
}
scanf("%s %s",str[0],str[1]);
m=2;
int a,b;
for(i=0;i<n;i++)
{
scanf("%s %s %d",s,e,&t);
for(j=0;j<m;j++)
{
if(strcmp(str[j],s)==0)
{
a=j;
break;
}
}
if(j==m)
{
a=j;
strcpy(str[j],s);
m++;
}
for(j=0;j<m;j++)
{
if(strcmp(str[j],e)==0)
{
b=j;
break;
}
}
if(j==m)
{
b=j;
strcpy(str[j],e);
m++;
}
g[a][b]=g[b][a]=t;
}
if(strcmp(str[0],str[1])==0)
{
printf("0\n");
continue;
}
dijkstra(0,1,m);
}
return 0;
}
hdu 2112 HDU Today,布布扣,bubuko.com
标签:des c style class blog code
原文地址:http://blog.csdn.net/u011721440/article/details/27234001