solve の最後で return solve(i+1) してるけど、現在の solve の機能は 「ビットパターン I の 1 のビットを全てタッチした時の盤面を ARY0 に返す」 となっていますよね。コメントアウトされてるけど、完成かどうかの判定もしている。ので return sum == a*a とすれば、I を与えたとき、完成するかどうかを返す(非再帰の)判定関数になります。 そこで単純な全数検査ソルバーは for i = 0 to a*a-1 if solve(i) then ? bin$(i) next で完成です。? bin$(i)の代わりに、i を a*a のマトリクス文字列にする p(i) という関数があると ? p(i) ですっきり。