标签:
Description
Input
Output
Sample Input
6 xiasha westlake xiasha station 60 xiasha ShoppingCenterofHangZhou 30 station westlake 20 ShoppingCenterofHangZhou supermarket 10 xiasha supermarket 50 supermarket westlake 10 -1
Sample Output
50 Hint: The best route is: xiasha->ShoppingCenterofHangZhou->supermarket->westlake 虽然偶尔会迷路,但是因为有了你的帮助 **和**从此还是过上了幸福的生活。 ――全剧终――
思路:本题是明显的最短路思想,我呀介绍的重点在于存图方法map,这个方法在头文件#include <map>中。map所定义的对象声明时标明所存对象的类型,以及把该对象映射到的类型。这里是把字符串类型映射到整形
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <cmath>
#include <cstdlib>
using namespace std;
const int INF=0x3f3f3f3f;
const int N=200;
int mp[N][N];
int dis[N];
int vis[N];
int m;
char s1[30];
char s2[30];
char str1[30],str2[30];
int t;
int dijstra(int x,int y)
{
if(x==0 || y==0) return dis[y]=INF;
memset(dis,INF,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[x]=0;
for(int i=1;i<=t;i++)
{
int k=x;
int mini=INF;
for(int j=1;j<=t;j++)
{
if(!vis[j]&&mini>dis[j])
mini=dis[k=j];
}
vis[k]=1;
if(k==y) return dis[y];
for(int j=1;j<=t;j++)
{
if(vis[j]||mp[k][j]==INF) continue;
dis[j]=min(dis[j],dis[k]+mp[k][j]);
}
}
return dis[y];
}
int main()
{
map<string,int> mm; //声明对象名为mm,把string类型的字符串映射到int类型
while(~scanf("%d",&m))
{
if(m==-1) return 0;
int k=m;
t=0;
scanf("%s%s",str1,str2);
memset(mp,INF,sizeof(mp));
if (m==0)
{
printf("-1\n");
continue;
}
mm.clear();
while(k--)
{