私は練習としてトップコーダーでこの問題を解決しようとしています、私はそれのためにDFSソリューションを実装しようとしました、それはバグを除いてうまくいきます:それは行き止まりに達したとしてもすべての未訪問のセルを横断し続けます、最初のコードは:
public void func(int[][] x, StringBuilder s, int i, int j, int n) {
if (i < 0 || j < 0 || i > n || j > n || x[i][j] == 1) {
return;
}
s.append((char) (97 + j));
s.append(n - i + 1 + "-");
x[i][j] = 1;
func(x, s, i, j + 1, n);
func(x, s, i - 1, j, n);
func(x, s, i + 1, j, n);
func(x, s, i, j - 1, n);
return;
}
public String dukePath(int n, String initPosition) {
String p = initPosition;
int x[][] = new int[n][n];
StringBuilder s = new StringBuilder("");
func(x, s, n - Integer.parseInt(p.charAt(1) + ""), (int) p.charAt(0) - 97, n - 1);
s.replace(s.length() - 1, s.length(), "");
if (s.length() > 40) {
s.replace(20, s.length() - 20, "...");
}
return s.toString();
}
そこで、ブールフラグと初期位置(z、y)を追加して、関数 "func()"のシグネチャを変更し、現在のセルを;と比較しようとしました。コードが初期位置に戻ろうとすると、戻るはずですが、機能しませんでした。
行き止まりまたは初期位置に再び到達したときにトラバースを停止するにはどうすればよいですか?