令和4年秋期午後問3設問4(2)

チョコさん  
(No.1)
https://www.ap-siken.com/kakomon/04_aki/pm03.html

設問4(2)の解説で、進行順序を全て記載してくださっています。
その中の、
「4.(2,1)から(3,3)まで戻る(9回)」
で、
(5,2)の後は(5,3)に戻っています。
(5,1)がOKフラグなのに、なぜ進まないのでしょうか。
2023.04.04 09:49
jjon-comさん 
AP プラチナマイスター
(No.2)
その探索は設問4の解説の(2)の1の図ですでに終えているから。
2023.04.04 12:14
チョコさん  
(No.3)
jjon-comさん
ありがとうございます。
何となく理解できるのですが、
「探索は設問4の解説の(2)の1の図ですでに終えているから」すると、
なぜ、設問4の解説の(2)の5の図で、(3,3)に進むことができるのでしょうか。
(3,3)も設問4の解説の(2)の3の図で一度訪問していると思います。
両者の違いはどこで判断しているのでしょうか。

すみません。何か勘違いしているのでしょうか。
ご教示お願いします。
2023.04.04 15:55
jjon-comさん 
AP プラチナマイスター
(No.4)
「経路を一歩一歩戻る」というイメージが間違っています。

図3の関数visit()は次の行為を順に試していき,
①y座標を1増やす
②x座標を1増やす
③y座標を1減らす
④x座標を1減らす
①~④をすべて終えたらその段階は終わり。
.....という動作を,自分から自分を呼び出す「再帰」で実現しています。

(1,1)→(1,2)→(1,3)→(2,3)→(3,3)
までは進んできた,という状態を基準にして,以降の流れを書き下してみます。
(以降に登場する「図」は,このサイトの解説の図を示しています)
(横幅が長いのでメモ帳などにコピペして眺めた方がいいでしょう)

(3,3)→①(3,4)→①上NG
(3,3)→①(3,4)→②(4,4)→①上NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→①終点(図(1)1)
(3,3)→①(3,4)→②(4,4)→②(5,4)→②右NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→①上跡(図(1)2)
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→②右NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→①上跡
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→②右NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→③(5,1)→①上跡
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→③(5,1)→②右NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→③(5,1)→③下NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→③(5,1)→④左NG(図(2)1)
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→①上NG(図(2)2)
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→②右跡
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→③下NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→④(3,2)→①上跡
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→④(3,2)→②右跡
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→④(3,2)→③(3,1)→①上跡
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→④(3,2)→③(3,1)→②右NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→④(3,2)→③(3,1)→③下NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→④(3,2)→③(3,1)→④(2,1)→①上NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→④(3,2)→③(3,1)→④(2,1)→②右跡
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→④(3,2)→③(3,1)→④(2,1)→③下NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→④(3,2)→③(3,1)→④(2,1)→④左跡(★図(2)3)
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→③(5,2)→④(4,2)→④(3,2)→④左NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→③(5,3)→④左NG
(3,3)→①(3,4)→②(4,4)→②(5,4)→④左跡
(3,3)→①(3,4)→②(4,4)→③下NG
(3,3)→①(3,4)→②(4,4)→④左跡
(3,3)→①(3,4)→③下跡
(3,3)→①(3,4)→④左NG
(3,3)→②右NG(★図(2)4)

★印で示した,解説の図(2)3 から 図(2)4 への処理の流れを見てください。

碁盤目のイラスト的には「経路を一歩一歩戻る」というイメージになりますが,
再帰プログラム的には「①上 ②右 ③下 ④左 をすべて終えたから戻る」となり,
前段階でも①②③④がほぼ終わっていたなら,戻りは一気に進んでいきます。
2023.04.04 18:55
チョコさん  
(No.5)
jjon-comさん
丁寧にありがとうございます!
再帰プログラムを中心に考えるべきでした!
本当にありがとうございました!
2023.04.04 19:40

返信投稿用フォーム

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

その他のスレッド


Pagetop