問題の説明:
多くの支援を受けて、海東グループはようやく危機を乗り越えました。それ以来、HDUの開発は順調に進んでいます。2050年までにグループはかなり大きくなり、トップに入ったと言われています。 500 QianjiangRousi経済開発区。この時、XHD夫婦も二階に引退し、諸曁市陸浦町タオヤオ村の美しい景色の家を購入し、薄暮の年を安らかに過ごし始めました。
このようにしばらく暮らした後も、徐さんは地元の交通についてあまり知りませんでした。落ち込んでいることもあります。行きたいのですが、どのバスに乗るか、どこに乗り換えるか、どこで降りるかわかりません(実は徐さんは車を持っていますが、楽しんでください。人々。これは徐さんのキャラクターです)。
徐さんはよく英語が苦手な人に「助けてくれませんか」と尋ねます。彼の混乱した無力な目を見て、あなたが熱心であるならば、あなたは彼を助けることができますか?
彼ができるだけ短い時間で目的地に到着するのを手伝ってください(各バスは出発駅と終点駅にのみ停車し、いつでも開通すると仮定します)。
入力:そこに
入力されたデータの複数のグループがあり、各グループの最初の行はバスN(0 <= N <= 10000)の総数である。
2行目は、徐氏の位置の開始および目的地の端部を有し、
そこでありますn行、各行には、ステーション名s、ステーション名e、およびsからeまでの時間整数t(0 <t <100)があります(各場所名は30以下の文字列です)。
注:データセット内の地名の数は150を超えません。
N ==-1の場合、入力の終了を意味します。
出力:
Xuが常に宛先に到達する場合は最短時間を出力し、そうでない場合は「-1」を出力します。
入力例:
6
xiasha westlakexiasha
ステーション
60xiasha ShoppingCenterofHangZhou30
ステーションwestlake20ShoppingCenterofHangZhou
スーパーマーケット
10xiashaスーパーマーケット50
スーパーマーケットwestlake10
-1
サンプル出力:
50
ヒント:
最適なルートは次の
とおりです。xiasha-> ShoppingCenterofHangZhou->スーパーマーケット-> Westlake
時々迷子になりますが、あなたの助けのおかげで、
それ以来、幸せな生活を送っています。
- 終わり -
サンプル図:
**質問のアイデア:**はダイクストラアルゴリズムの調査にすぎません。この質問では、最初の連絡先であるマップコンテナを使用する必要があります。マップコンテナは非常に使いやすいと感じています。
Mapは、1対1のハッシュを提供するSTLの連想コンテナです。c ++コードを以下に示します。
C ++マップ使用ポータル:
https : //blog.csdn.net/sevenjoin/article/details/81943864?utm_medium = distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id = 9a6d5346-1377-4c4e- a194 -a75cfda661c3&depth_1-utm_source = distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
参照コード:
#include <iostream>
#include <string>
#include <cstring>
#include <map>
const int INF=0x3f3f3f3f;//不知道为什么,不真得把INF设置成无穷大,答案总是错误。
using namespace std;
int G[151][151];
int visited[151];
int dist[151];
void dijkstra(int n)
{
memset(visited,0,sizeof(visited));
for(int i=1;i<=n;i++)
dist[i]=G[1][i];
for(int i=1;i<n;i++)
{
int min=INF,pos;
for(int j=1;j<=n;j++)
{
if(visited[j]==0&&dist[j]<min)
{
min=dist[j];
pos=j;
}
}
visited[pos]=1;
for(int j=1;j<=n;j++)
{
if(visited[j]==0&&dist[j]>dist[pos]+G[pos][j])
dist[j]=dist[pos]+G[pos][j];
}
}
}
int main()
{
int n,t;
string st,en,s1,s2;
map<string,int>mp;
while(cin>>n&&n!=-1)
{
mp.clear();
memset(G,INF,sizeof(G));
cin>>st>>en;
getchar();
mp[st]=1;
mp[en]=2;
int cnt=3;
for(int i=0;i<n;i++)
{
cin>>s1>>s2>>t;
getchar();
if(!mp[s1])
mp[s1]=cnt++;
if(!mp[s2])
mp[s2]=cnt++;
G[mp[s1]][mp[s2]]=G[mp[s2]][mp[s1]]=t;
}
if(st==en)
{
printf("0\n");
continue;
}
dijkstra(cnt);
if(dist[2]!=INF)
printf("%d\n",dist[2]);
else
printf("-1\n");
}
return 0;
}
**参照:** https://blog.csdn.net/Radium_1209/article/details/82319594