平成29年春期午後問8

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
しばいぬさん  
(No.1)
https://www.fe-siken.com/kakomon/29_haru/pm08.html
似たような質問があるのですが、理解でしませんでした。

24行目 pDist[j] < pDist[i] の条件を満たすpDist[j]がわかりません。経路が図1の時、sp = 0 だった場合、i=0で、14~17行目はbreak、20~22行目はbreak、
そうすと   23~27行目が
pDist[1]=∞ < pDist[0]=0
pDist[2]=∞ < pDist[0]=0
 ...
pDist[6]=∞ < pDist[0]=0  で条件を満たすpDist[j]がないと思うのですが?
2023.07.07 19:33
jjon-comさん 
FE ゴールドマイスター
(No.2)
出発地(sp)が0であったなら、
11行目 ・pDist[sp]←0 によってこの配列要素は次のようになり
pDist[] = {0, ∞, ∞, ∞, ∞, ∞, ∞}
最小値の位置である0番目をiは最初から指していますから、
ご指摘のとおり
pDist[j] < pDist[i] という条件を満たすpDist[j]は見つかりません。
でもそれは1巡目のループだからです。

その後、28-38行目の処理によって、配列要素は次のようになり、
pDist[] = {0, 2, 8, 4, ∞, ∞, ∞}
pFixed[] = {true, false, false, false, false, false, false}

2巡目のループに入ります。
13-22行目の処理で i←1 になり、
pDist[1]=2 はたまたまこの巡の最小値の位置なので、このループでも
pDist[j] < pDist[i] という条件を満たすpDist[j]は見つかりません。

その後、28-38行目の処理によって、配列要素は次のようになり、
pDist[] = {0, 2, 8, 4, 5, ∞, ∞}
pFixed[] = {true, true, false, false, false, false, false}

3巡目のループに入ります。
13-22行目の処理で i←2 になります。このiが指す pDist[2]=8 は
> ②行番号23~29
> 出発地からの最短距離が未確定の地点の中で,出発地からの距離が最も短い地点
ではありません。pDist[3]=4 の方が「未確定、かつ、より短い地点」になります。
この3巡目で
pDist[j] < pDist[i] という条件を満たすpDist[j]が見つかります。
2023.07.08 01:51
しばいぬさん  
(No.3)
だいぶ前の問題なのに、こんなに早く解説ありがとうございます。

プログラムの流れごとに具体的な変数の値を書いていただいたので、理解がはかどりました。ナイスです。
2023.07.09 04:33

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop