SS に操作を施したときにありうる全ての盤面が TT と一致するか確認します。 一見、

  • 左右反転させたかどうか
  • 上下反転させたかどうか
  • 何度回転させたか
  • 転置したかどうか

3232 通りの盤面があると思えますが、実はありうる盤面はそれほど多くないです。

【操作について】

  • 上下反転して右に 180180 度回転させることで、左右反転と同じことが出来ます。
  • 上下反転して右に 9090 度回転させることで、転置と同じことが出来ます。

【盤面の種類数について】
実は 88 種類の盤面を考えればよいです。
図 (小)

上図より、作成できる盤面は開始点をどこにするか( 44 通り)×矢印をどの方向にするか( 22 通り)の 88 通りとなります。

よって、操作を上下反転・右に 9090 度回転の 22 つに絞ることが出来ます。(※)
元の盤面にこれらの操作を施した、88 通りの盤面について調べればよいことが分かります。

(※)
実際に上下反転と右に 9090 度回転だけを行うことで、すべての盤面を作ることが出来ます。
余力のある方は試してみてください。

C++
Python