HOME»基本情報技術者試験掲示板»平成29年春期午後問8
投稿する

[4497] 平成29年春期午後問8

 冒険さん(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さん(No.2) 
FE プラチナマイスター
>例えば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さん(No.5) 
FE プラチナマイスター
>30から38行目のループを抜けた後は、何行目に行くのでしょうか?
行番号12に戻ります。行番号12のループ継続の条件式がtrueとなっているので無限ループになるのでは、と思うかもしれませんが、出発地からすべての地点までの最短距離が確定してれば(pFixed[0〜6]=trueとなっている)行番号14〜19のループ処理によってi=7=nPointとなるため、行番号21のbreak処理で行番号12〜39のループから抜けられます。
2022.10.17 13:49
chihiroさん(No.6) 
FE プラチナマイスター
>解説を見ると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日経過したスレッドへの書込みはできません。
© 2010-2024 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop