1

「Knight's Tour」と呼ばれる、チェス盤のすべての正方形 (サイズは実際には問題ではありませんが、今のところ 6x6 です) を通過するプログラムを作成しようとしています

ツアーは閉鎖されているはずです。つまり、最後に訪れた広場の騎士は、開始した広場を「攻撃」できます。コードはいくつかの正方形でうまく機能します。たとえば、main の入力 'traverse(1,1,1)' は、彼がトラバースしているだけでなく、バ​​ックトラックしてゴールに向かってトラバースに戻ることを示す出力を生成します。ただし、代わりに「traverse(1,0,0)」を入力すると、StackOverflowErrorが発生します。バックトラックとトラバースが成功することもあるので、コードが機能することはわかっていますが、エラーを取り除く方法がわかりません。私はあまりにも多くの電話をかけていると思いますが、それを回避する方法がわかりません.訪問する広場がたくさんあります:) コードを編集しました。

4

1 に答える 1

4

再帰を使用して指数関数的な複雑さの問題を解決しようとしています。これは、非常に小さな入力以外では機能しません。スタック サイズは、問題のサイズよりも急速に大きくなります。スタックを吹き飛ばすのに非常に大きな問題サイズは必要ありません。

StackOverflowErrors がなくなるわけではありません。アルゴリズムを再帰ベースではなくループベースに再考する必要があります。

于 2011-03-05T01:45:40.740 に答える