『右折禁止の平安京』解答


◆愛知県 Y.M.Ojisan さんからの解答。

【問題1】

(m,n)=(2,2)のとき、
格子点(0,0)から格子点(1,1)に行く方法は4通り。
下図参照。

なお、赤:出発 緑到着位置です。

【問題2】

(m,n)=(3,3)のとき、
格子点(0,0)から格子点(3,3)に行く方法は11通り。
下図参照

なお、赤:出発 緑到着位置です。
茶色経路は最長の一つ、橙色経路は左折回数最大の一つです。

【問題3】

(m,n)=(3,3)のとき、
格子点(1,1)から格子点(2,2)に行く方法は36通り。

【問題4】

(m,n)=(4,3)のとき、
格子点(0,0)から格子点(4,3)に行く方法は31通り。

【問題5】

(m,n)=(4,3)のとき、
格子点(1,1)から格子点(2,2)に行く方法は73通り。

【問題6】

(m,n)=(3,4)のとき、
格子点(0,0)から格子点(3,4)に行く方法は 31通り。

【問題7】

(m,n)=(3,4)のとき、
格子点(1,1)から格子点(2,2)に行く方法は 68通り。

【感想と数値計算法】

 問題8と9は出来ませんでした。
ここに示した解は計全部算機による結果です。

ちょっと前にTV番組ですがTOKIOが2グループに分かれて、伊豆から東京タワーまで右折しないで自動車で競争するのがありました。

 車の渋滞の原因の大きなものに右折車があります。
朝などある交差点では1回の信号で2〜3台しか進みません。
都市部では全部右折禁止にすれば、渋滞が減るかも。
そういった意味で結構現実的な問題かなと思います。

また、平安京は我が故郷ですので、結構考えたのですが一般解は???でした。

 現実的問題としてはとりあえず計算機で解ければ良いので、プログラムを作成しました。
ロジックはレトロにしてみました。
今を去る うん十年前高校生のころ、NHK教育TVでFORTRAN講座がありました。
例として「ペントミノ(パズル)の解を全部求める」というのがあって、当時の少ないメモリと遅いCPU用にとても美しいというか無駄のないプログラムであり大きな影響を受けましたが、その方法をベースにしました。

概要を以下に示します。

まず、通過通路をチェックするメモリが必要ですが、単純に考えると縦用と横用2個が2次元的に必要です。
でも上図(m=3、n=4)の様に45度倒し、チェッカーボード上に置くと図のように統一的に扱えます。
ボードの大きさは
(m+n+2)×(m+n+1)

次に移動方向です。
絶対的には4方向がありますが、下表のように前回の方向に対しては直進左折の2種しか選択できません。
これは0/1で表現することが出来ます。

今回移動可能方向&セル

移動
番号

前回移
動方向

(-1,1)

(1、1)

(1,-1)

(-1、-1)

(任意)

0

(-1,1)

×

×

×

1

(1、1)

×

×

×

2

(1,-1)

×

×

×

3

(-1、-1)

×

×

×

さらに位置を表現する方法として、下表のようにIJ座標を合成して、チェッカーボードを1次元の配列にします。
こうすると「移動」は一回の足し算で実現され、計算時間が短縮されます。

移動番号

座標表現

I 軸座標×P

+J軸座標

0

(−1,1)

−1×P

+1

1

(1、1)

1×P

+1

2

(1,−1)

1×P

−1

3

(−1、−1)

−1×P

−1

P=n+m+1

そしてメモリには

未通過 =0     ≦0

到着セル=−1    ≦0

通過済み(通過番号)  >0

通路なし=P*P    >0

を記入して置/行きます。

ただし、出発位置・到着位値は格子点でありチェッカーボードのセルではないので、出発格子点まわりの4つのセルのいずれかから出発し、到着格子点まわりの4つのセルのいずれかに到着する道順を探索します。

【大きな領域での計算結果】

 京都の碁盤の目は今では論理性が崩れています。
東西筋は 「。。姉三六角蛸錦。。」というふうに歌になっていますが、蛸薬師・錦小路など車では通りにくいか通れない小路です。

大きくてほぼ端から端まで通じている道だけを数えて M=7 N=8 とします。下記

私の旧実家はMs=0 Ns=7付近にありました。
大学はMe=7、Ne=8にあります。

 家から大学まで右折禁止で行く方法はプログラムで計算すると、
全部で なんと22,2784,2907とおり でした。

なお、探索時間は500MHzPCですが17時間もかかり、単なるしらみつぶしではこれ以上大きいのは無理。

通りは

西から:西大路 七本松 千本−大宮   堀川 烏丸 河原町 川端 東山
北から:今出川 丸太町 御池(一部迂回) 三条 四条 五条  七条 九条 十条
としました。

三条通りは途中に商店街があって本当は直行できませんが、加茂川にかかる橋があるので採用しました。
二条城のある二条通りはくねくね曲がった路地のような通りに落ちぶれています。


 『右折禁止の平安京』へ

 数学の部屋へもどる