import java.util.*;
public class Main {
private static int m;
private static int n;
private static List<String> exist = new ArrayList<>();
private static List<String> distin = new ArrayList<>();
public static void main(String[] args) {
exist.add("0#0");
Scanner a = new Scanner(System.in);
while (a.hasNext()) {
m = a.nextInt();
n = a.nextInt();
int[][] all = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
all[i][j] = a.nextInt();
}
}
dsf(0, 0, all);
sout(0, 0, all);
}
}
public static void dsf(int i, int j, int[][] all) {
if (i == m - 1 && j == n - 1) {
return;
}
if (i + 1 < m && all[i + 1][j] == 0) {
dsf(i + 1, j, all);
}
if (j + 1 < n && all[i][j + 1] == 0) {
dsf(i, j + 1, all);
}
if (i == m - 1 && j < n - 1 && all[i][j + 1] == 1 && (all[i - 1][j] == 1 || j == 0)) {
all[i][j] = 1;
}
if (i < m - 1 && j == n - 1 && all[i + 1][j] == 1 && (all[i][j - 1] == 1 || i == 0)) {
all[i][j] = 1;
}
}
public static void sout(int i, int j, int[][] all) {
if (i == m - 1 && j == n - 1) {
exist.add(i + "#" + j);
System.out.println("(" + i + "," + j + ")");
return;
}
if (i + 1 < m && all[i + 1][j] == 0
&& !exist.contains((i + 1) + "#" + j)) {
soutln(i, j);
exist.add((i + 1) + "#" + j);
sout(i + 1, j, all);
}
if (j + 1 < n && all[i][j + 1] == 0
&& !exist.contains(i + "#" + (j + 1))) {
soutln(i, j);
exist.add(i + "#" + (j + 1));
sout(i, j + 1, all);
}
if (i - 1 >= 0 && all[i - 1][j] == 0
&& !exist.contains((i - 1) + "#" + j)) {
soutln(i, j);
exist.add((i - 1) + "#" + j);
sout(i - 1, j, all);
}
if (j - 1 >= 0 && all[i][j - 1] == 0
&& !exist.contains(i + "#" + (j - 1))) {
soutln(i, j);
exist.add(i + "#" + (j - 1));
sout(i, j - 1, all);
}
}
private static void soutln(int i, int j) {
if (!distin.contains(i + "#" + j) && !exist.contains((m - 1) + "#" + (n - 1))) {
System.out.println("(" + i + "," + j + ")");
}
distin.add(i + "#" + j);
}
}
迷宫问题-只能横着左右走或竖着上下走
最新推荐文章于 2024-07-15 22:27:12 发布