杭电 hdu 1546 Idiomatic Phrases Game (最短路径 + Dijkstra)
Idiomatic Phrases Game
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2504 Accepted Submission(s): 815
Problem Description
Tom is playing a game called Idiomatic Phrases Game. An idiom consists of several Chinese characters and has a certain meaning. This game will give Tom two idioms. He should build a list of idioms and the list starts and ends with the two given idioms. For every two adjacent idioms, the last Chinese character of the former idiom should be the same as the first character of the latter one. For each time, Tom has a dictionary that he must pick idioms from and each idiom in the dictionary has a value indicates how long Tom will take to find the next proper idiom in the final list. Now you are asked to write a program to compute the shortest time Tom will take by giving you the idiom dictionary.
Input
The input consists of several test cases. Each test case contains an idiom dictionary. The dictionary is started by an integer N (0 < N < 1000) in one line. The following is N lines. Each line contains an integer T (the time Tom will take to work out) and an idiom. One idiom consists of several Chinese characters (at least 3) and one Chinese character consists of four hex digit (i.e., 0 to 9 and A to F). Note that the first and last idioms in the dictionary are the source and target idioms in the game. The input ends up with a case that N = 0. Do not process this case.
Output
One line for each case. Output an integer indicating the shortest time Tome will take. If the list can not be built, please output -1.
Sample Input
5 5 12345978ABCD2341 5 23415608ACBD3412 7 34125678AEFD4123 15 23415673ACC34123 4 41235673FBCD2156 2 20 12345678ABCD 30 DCBF5432167D 0
Sample Output
Author
ZHOU, Ran
Source
Zhejiang Provincial Programming Contest 2006
Recommend
linle | We have carefully selected several similar problems for you: 1548 1317 1535 3339 1217
题意:成语接龙,就是要将第一个成语当作首,中间过程随便挑其它成语,最后要可以将最后一个成语连接起来,也就是让第一个和最后一个成语保持连接。
如果可以连接,输出最短的用时,不然输出-1
先给予一个n,接着有n行,然后是v和一串字符ch[],v表示连接这个成语的用时,ch[]表示成语
题解:这里可以用Dijkstra来算,通过从首个成语开始计算。
有几个要注意的地方:
1. 要注意,成语的字数,是将头4个字符当作首字,将后4个字符当做尾,只要前一个成语的尾和后一个成语的头相同,就可以连接
2. 要注意,成语的个数,不一定是四字成语,可能是很多很多,所以字符串要开的大一点,反正我是开1000以上
3. 连接的时候,最后的一个成语的时间不能算进去
4. 连接的时候,第一个成语的首,必须连接第一个成语的尾,这个要注意,不能化点之后就不注意连接
#include