数学A / 場合の数

指定の点を通り別の点を通らない最短経路

★★★★ 難関最短経路組合せ

問題

下の図のような碁盤の目の道がある。地点 から地点 まで最短距離で行く経路のうち、地点 を通り、かつ地点 を通らない経路は何通りあるか。 とする。

ABPQ
A(0,0)→B(5,4) の碁盤。P(2,1)を通り Q(3,3)を通らない最短経路を数える
ヒントを見る

を通り を通らない」=「 を通る」-「 も通る」。各区間 などの経路数を組合せで数える。

解答・解説

方針

を通る経路」から「 の両方を通る経路」を引く。各区間の最短経路数は、右と上の移動回数から組合せで求める。

解答

⓪ 発想 — どう考え始めるか。 を通り を通らない」は、直接数えず引き算で攻める。

を通る経路」から「 の両方を通る経路」を引けば、 を通るが は通らない経路になる。

各区間の最短経路数は、右と上の移動回数の組合せ。 をそれぞれ計算し、 を求める。

公式右に 回・上に 回進む最短経路は 通り。ある点を通る経路数 =(そこまで)×(そこから)

を通る経路。 は右 ・上 通り。 は右 ・上 通り。よって

の両方を通る経路。 通り。 は右 ・上 通り。 は右 ・上 通り。よって

③ 引く。

まとめ:「通る・通らない」が混ざったら「通る全体 − 両方通る」の引き算。最短経路数は区間ごとに で出し、点を通る経路は掛け算でつなぐ。 を通る から、余分な「 も通る 」を除いて

発展 — 一歩先へ。 格子の最短経路数は、各点に「左+下」を足し込むパスカルの三角形そのもの。通行止め(通らない点)は、その点を にするだけで対応できる。これは動的計画法(DP)の最も基本的な例で、迷路の経路数え上げやロボットの経路計画の原型になっている。

通り

別解

別解 — 格子の各点に経路数を書き込む(視覚で確実なルート)。 から各格子点までの最短経路数を、左下から順に書き込む(各点は「左の点+下の点」の和)。ただし「 を通らない」ので、 の経路数を にしてから先へ進める。

まず から までの経路数は 。ここからは「 を出発点」として、 を封鎖しながら まで足し上げる。

を置き、右・上へ和を伝播。 に来たらそこを にリセット( 経由を消す)。この“通行止め付き”の経路数え上げを まで続けると が現れる。

引き算(本解) と同じ結果。格子に数を書き込む方法は、封鎖点が複数あっても「その点を にする」だけで対応でき、視覚的に確実。動的計画法(DP)の最も素朴な形だ。

ポイント

  • を通る も通る
  • を通り を通らない

よくある間違い

  • を通り を通らない」を直接数えようとする(「 通る」 両方通る」)。
  • 各区間の経路数 の計算を誤る( は右 ・上 )。
  • の積で計算し忘れる。