平成29年春期午後問8

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
冒険さん  
(No.1)
https://www.fe-siken.com/kakomon/29_haru/pm08.html

プログラム行33についてなのですが、常にnewDist>pDist[j]になってしまい、
pDist[j]が更新されないことになってしまうのですが、どこが間違っているのでしょうか?

例えばj=1のときだと、newDist=2になり、pDist[1]=0でなってしまうのですが。
2022.10.17 09:56
chihiroさん 
FE プラチナマイスター
(No.2)
>例えばj=1のときだと、newDist=2になり、pDist[1]=0でなってしまうのですが。
1回目の最短経路探索処理の繰り返しだとすると、行番号33の時点ではpDist[1]=∞となっている(行番号6~10のループでpDist[0~6]←∞、行番号11でpDist[0]←0としている)のでnewDist<pDist[1]は真となります。
2022.10.17 10:28
冒険さん  
(No.3)
chihiroさん

早速のご回答ありがとうございます。
基本的なところで勘違いしていたようです。
おかげで、理解できました。
ありがとうございました。
2022.10.17 11:04
冒険さん  
(No.4)
すみません、後続のトレース処理について教えてください。
30から38行目のループを抜けた後は、何行目に行くのでしょうか?

解説を見ると2回目のループのときには、i=1になっているようなのですが、
どこでiが0から1に変更されたのかわかりません…
2022.10.17 13:29
chihiroさん 
FE プラチナマイスター
(No.5)
>30から38行目のループを抜けた後は、何行目に行くのでしょうか?
行番号12に戻ります。行番号12のループ継続の条件式がtrueとなっているので無限ループになるのでは、と思うかもしれませんが、出発地からすべての地点までの最短距離が確定してれば(pFixed[0~6]=trueとなっている)行番号14~19のループ処理によってi=7=nPointとなるため、行番号21のbreak処理で行番号12~39のループから抜けられます。
2022.10.17 13:49
chihiroさん 
FE プラチナマイスター
(No.6)
>解説を見ると2回目のループのときには、i=1になっているようなのですが、どこでiが0から1に変更されたのかわかりません…
1回目の処理でpFixed[0]=trueとなっているので(行番号29より)、2回目の処理では
13行目:i←0
14行目:i<nPointが真なので14~19行目のループ継続
15行目:not pFixed[0]が偽なので(pFixed[0]=trueより)16行目の処理はなし
18行目:i←i+1=1として14行目に戻る
14行目:条件式真なのでループ継続
15行目:not pFixed[1]が真なので(pFixed[1]=falseより)16行目の処理を行う
16行目:breakで14~19行目のループから抜ける
となり、i=1になります。
2022.10.17 14:00
冒険さん  
(No.7)
chihiroさん

ご丁寧な説明ありがとうございます。
お陰様で理解できました。
2022.10.17 15:34

返信投稿用フォーム

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

その他のスレッド


Pagetop