数学A / 場合の数
指定の点を通り別の点を通らない最短経路
問題
下の図のような碁盤の目の道がある。地点 から地点 まで最短距離で行く経路のうち、地点 を通り、かつ地点 を通らない経路は何通りあるか。、、、 とする。
ヒントを見る
「 を通り を通らない」=「 を通る」-「 も も通る」。各区間 、 などの経路数を組合せで数える。
解答・解説
方針
「 を通る経路」から「 と の両方を通る経路」を引く。各区間の最短経路数は、右と上の移動回数から組合せで求める。
解答
⓪ 発想 — どう考え始めるか。 「 を通り を通らない」は、直接数えず引き算で攻める。
「 を通る経路」から「 と の両方を通る経路」を引けば、 を通るが は通らない経路になる。
各区間の最短経路数は、右と上の移動回数の組合せ。、、 をそれぞれ計算し、 を求める。
① を通る経路。 は右 ・上 で 通り。 は右 ・上 で 通り。よって
② と の両方を通る経路。 は 通り。 は右 ・上 で 通り。 は右 ・上 で 通り。よって
③ 引く。
まとめ:「通る・通らない」が混ざったら「通る全体 − 両方通る」の引き算。最短経路数は区間ごとに で出し、点を通る経路は掛け算でつなぐ。 を通る から、余分な「 も通る 」を除いて 。
発展 — 一歩先へ。 格子の最短経路数は、各点に「左+下」を足し込むパスカルの三角形そのもの。通行止め(通らない点)は、その点を にするだけで対応できる。これは動的計画法(DP)の最も基本的な例で、迷路の経路数え上げやロボットの経路計画の原型になっている。
通り
別解
別解 — 格子の各点に経路数を書き込む(視覚で確実なルート)。 から各格子点までの最短経路数を、左下から順に書き込む(各点は「左の点+下の点」の和)。ただし「 を通らない」ので、 の経路数を にしてから先へ進める。
まず から までの経路数は 。ここからは「 を出発点」として、 を封鎖しながら まで足し上げる。
に を置き、右・上へ和を伝播。 に来たらそこを にリセット( 経由を消す)。この“通行止め付き”の経路数え上げを まで続けると に が現れる。
引き算(本解) と同じ結果。格子に数を書き込む方法は、封鎖点が複数あっても「その点を にする」だけで対応でき、視覚的に確実。動的計画法(DP)の最も素朴な形だ。
ポイント
- を通る 、 も も通る 。
- を通り を通らない 。
よくある間違い
- 「 を通り を通らない」を直接数えようとする(「 通る」「 と 両方通る」)。
- 各区間の経路数 の計算を誤る( は右 ・上 で )。
- を と の積で計算し忘れる。