哈利·波特要考試了,他需要你的幫助。這門課學的是用魔咒將一種動物變成另一種動物的本事。例如將貓變成老鼠的魔咒是haha,將老鼠變成魚的魔咒是hehe等等。反方向變化的魔咒就是簡單地將原來的魔咒倒過來念,例如ahah可以將老鼠變成貓。另外,如果想把貓變成魚,可以通過念乙個直接魔咒lalala,也可以將貓變老鼠、老鼠變魚的魔咒連起來念:hahahehe。
現在哈利·波特的手裡有一本教材,裡面列出了所有的變形魔咒和能變的動物。老師允許他自己帶乙隻動物去考場,要考察他把這只動物變成任意乙隻指定動物的本事。於是他來問你:帶什麼動物去可以讓最難變的那種動物(即該動物變為哈利·波特自己帶去的動物所需要的魔咒最長)需要的魔咒最短?例如:如果只有貓、鼠、魚,則顯然哈利·波特應該帶鼠去,因為鼠變成另外兩種動物都只需要念4個字元;而如果帶貓去,則至少需要念6個字元才能把貓變成魚;同理,帶魚去也不是最好的選擇。
輸入說明:輸入第1行給出兩個正整數n (≤100)和m,其中n是考試涉及的動物總數,m是用於直接變形的魔咒條數。為簡單起見,我們將動物按1~n編號。隨後m行,每行給出了3個正整數,分別是兩種動物的編號、以及它們之間變形需要的魔咒的長度(≤100),數字之間用空格分隔。
輸出哈利·波特應該帶去考場的動物的編號、以及最長的變形魔咒的長度,中間以空格分隔。如果只帶1只動物是不可能完成所有變形要求的,則輸出0。如果有若干只動物都可以備選,則輸出編號最小的那只。
6113
47012
15450
26505
66013
704660
36805
110024
605280
4
70
這個題就是乙個很典型的多源有權圖尋最短路徑。但是還有一點不太一樣,題目要求有兩點:一是找到這個動物變成其他動物魔咒裡面最長的那個魔咒的長度。二是找到乙個動物可以變成所有動物,而且是其他動物變換裡面魔咒最短的。
第一種方法(推薦):可以先用floyd演算法,把所有的最短路徑先找到,然後用乙個陣列存,每乙個動物變成其他所有動物的魔咒中最長的,然後再把每乙個最長的進行比較找到最短的,輸出下標和長度即可。
第二種方法:每乙個動物都迴圈一遍dijkstra演算法,找到最短路徑。然後定義乙個max和minl,max更新為每乙個動物最短路徑裡面最長的魔咒,minl更新max裡面最小的,每一次minl更新的同時更新下標的記錄值,最後輸出下標和minl。
//floyd演算法
#include
#include
#define infinity 1000000
#define maxvertexnum 101
/* maximum number of vertices */
typedef
int vertex;
/* vertices are numbered from 0 to maxvertexnum-1 */
typedef
int weighttype;
typedef
struct gnode *ptrtognode;
struct gnode
;typedef ptrtognode mgraph;
mgraph readg()
}for
(i=0
;ine;i++
)return g;
}int
main()
}}int f=1;
for(i=
1;i<=g->nv;i++)}
if(!f1)
break;}
if(f)
;for
(i=1
;i<=g->nv;i++)}
int min=1;
for(i=
1;i<=g->nv;i++
)printf
("%d %d\n"
,min,maxnum[min]);
}else
return0;
}
//dijkstra演算法
#include
#include
#define maxint 2147483647
typedef
struct
amgraph;
int s[
102]
;//記錄源點v0到v1是否已經被確定最短路徑長度
int d[
102]
;//記錄v0到vi的當前最短路徑長度
int path[
102]
;//記錄v0到vi的當前最短路徑vi的前驅
int n,i,u,j,m,v,min,w,a,b,c,min1 =
999999
,max =
-991111
,p =0;
void
dijkstra
(amgraph g,
int v0)
s[v0]=1
; d[v0]=0
;//初始化結束;
for(i =
1;i < n;i ++
) s[v]=1
;for
(w =
0;w < n;w ++)if
(!s[w]
&&(d[v]
+ g.arcs[v]
[w]< d[w]))
}}intmain()
for(u =
0;u < g.vexnum;u ++)if
(max < min1)}if
(p ==0)
printf
("0");
else
printf
("%d %d\n"
,p,min1)
;return0;
}
7 1 哈利 波特的考試 25分
哈利 波特要考試了,他需要你的幫助。這門課學的是用魔咒將一種動物變成另一種動物的本事。例如將貓變成老鼠的魔咒是haha,將老鼠變成魚的魔咒是hehe等等。反方向變化的魔咒就是簡單地將原來的魔咒倒過來念,例如ahah可以將老鼠變成貓。另外,如果想把貓變成魚,可以通過念乙個直接魔咒lalala,也可以將...
PTA 哈利 波特的考試 (25 分
哈利 波特的考試 25 分 哈利 波特要考試了,他需要你的幫助。這門課學的是用魔咒將一種動物變成另一種動物的本事。例如將貓變成老鼠的魔咒是haha,將老鼠變成魚的魔咒是hehe等等。反方向變化的魔咒就是簡單地將原來的魔咒倒過來念,例如ahah可以將老鼠變成貓。另外,如果想把貓變成魚,可以通過念乙個直...
PTA7 8 哈利 波特的考試
哈利 波特要考試了,他需要你的幫助。這門課學的是用魔咒將一種動物變成另一種動物的本事。例如將貓變成老鼠的魔咒是haha,將老鼠變成魚的魔咒是hehe等等。反方向變化的魔咒就是簡單地將原來的魔咒倒過來念,例如ahah可以將老鼠變成貓。另外,如果想把貓變成魚,可以通過念乙個直接魔咒lalala,也可以將...