1031. Campus

來源:互聯網
上載者:User

1031. Campus

Description

At present, Zhongshan University has 4 campuses with a total area of 6.17 square kilometers sitting respectively on both sides of the Pearl River or facing the South China Sea. The Guangzhou South Campus covers an area of 1.17
square kilometers, the North Campus covers an area of 0.39 square kilometers, the Guangzhou East Campus has an area of 1.13 square kilometers and the Zhuhai Campus covers an area of 3.48 square kilometers. All campuses have exuberance of green trees, abundance
of lawns and beautiful sceneries, and are ideal for molding the temperaments, studying and doing research.

 

 

       Sometime, the professors and students have to go from one place to another place in one campus or between campuses. They want to find the shortest path between their source place S and target place T.
Can you help them?

 

 

Input

The first line of the input is a positive integer C. C is the number of test cases followed. In each test case, the first line is a positive integer N (0<N<=100) that represents the number of roads. After that, N lines follow. The i-th(1<=i<=N) line contains
two strings Si, Ti and one integer Di (0<=Di<=100). It means that there is a road whose length is Di between Si and Ti. Finally, there are two strings S and T, you have to find the shortest path between S and T. S, T, Si(1<=i<=N) and Ti(1<=i<=N) are all given
in the following format: str_Campus.str_Place. str_Campus represents the name of the campus, and str_Place represents the place in str_Campus. str_Campus is "North", "South", "East" or "Zhuhai". str_Place is a string which has less than one hundred lowercase
characters from "a-z". You can assume that there is at most one road directly between any two places.

Output

The output of the program should consist of C lines, one line for each test case. For each test case, the output is a single line containing one integer. If there is a path between S and T, output the length of the shortest path between them. Otherwise just
output "-1" (without quotation mark). No redundant spaces are needed.

Sample Input

12South.xiaolitang South.xiongdelong 2South.xiongdelong Zhuhai.liyuan 100South.xiongdelong South.xiaolitang
Sample Output

2
Problem Source

ZSUACM Team Member

#include <iostream>#include <map>#include <string>#include <cstring>using namespace std;const int INF=100000;//自訂無窮大int adj[205][205];//記錄兩點間距離bool flag[205];//標記處理過的點int dis[205];//記錄各點到某點的距離int t,road,d,n;//t為測試資料群組數,road為每組資料行數,d為沒行資料表示的兩點間距離,n記錄映射對應的路的編號string start,send;//每行輸入的兩條路int dijkstra(int a,int b)//dijkstra法處理a到b的最短路{memset(flag,0,sizeof(flag));for(int i=0;i<n;i++)dis[i]=((i==a)?0:INF);//其他各點初始化距起點為INFfor(int i=0;i<n;i++){int min=INF,x=a;///x為要求出的未標記點中距離a最近的點for(int y=0;y<n;y++){if(!flag[y]&&dis[y]<min){min=dis[y];x=y;}}flag[x]=1;//最近的點標記,下次則從未標記的點中選取for(int y=0;y<n;y++)dis[y]=(dis[y]>dis[x]+adj[x][y]?dis[x]+adj[x][y]:dis[y]);}if(flag[b])//若a點與b點連通return dis[b];else return -1;}int main(){cin>>t;while(t--){cin>>road;for(int i=0;i<205;i++)for(int j=0;j<205;j++)adj[i][j]=((i==j)?0:INF);map<string,int>mymap;//路與編號相對應n=0;//n記錄對應路的編號for(int i=0;i<road;i++){//string end;cin>>start>>send>>d;if(!mymap.count(start))mymap[start]=n++;if(!mymap.count(send))mymap[send]=n++;adj[mymap[start]][mymap[send]]=adj[mymap[send]][mymap[start]]=d;}cin>>start>>send;if(start==send) cout<<0<<endl;else if(!mymap.count(start)||!mymap.count(send)) cout<<-1<<endl;else cout<<dijkstra(mymap[start],mymap[send])<<endl;}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.