深度优先搜索 ,向四个方向下一步搜索

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static List<int[]> result = null;
    public static List<int[]> temp = new ArrayList<int[]>();
    public static boolean flag = false;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int line = in.nextInt();
            int lie = in.nextInt();
            int[][] drop = new int[line][lie];
            for (int i = 0; i < line; i++) {
                for (int j = 0; j < lie; j++) {
                    drop[i][j] = in.nextInt();
                }
            }
            dfs(drop, 0, 0, 0);
            for (int[] ll : result) {
                System.out.println("(" + ll[0] + "," + ll[1] + ")");
            }
        }
    }
    public static void dfs(int[][] drop, int count, int line, int lie) {
        if (line == drop.length - 1 && lie == drop[0].length - 1) {
            flag = true;
            temp.add(new int[] {line, lie});
            if (count < temp.size() ||  temp.size() == 0) {
                result = new ArrayList<int[]>(temp);
            }
            return;
        }
        temp.add(new int[] {line, lie});
        drop[line][lie] = 1;
        if (line - 1 >= 0 && drop[line - 1][lie] == 0) {
            dfs(drop, count + 1, line - 1, lie);
        }
        if (lie - 1 >= 0 && drop[line][lie - 1] == 0) {
            dfs(drop, count + 1, line, lie - 1);
        }
        if ( line + 1 < drop.length && drop[line + 1][lie] == 0) {
            dfs(drop, count + 1, line + 1, lie);
        }
        if ( lie + 1 < drop[0].length && drop[line][lie + 1] == 0) {
            dfs(drop, count + 1, line, lie + 1);
        }
        temp.remove(temp.size() - 1);
        drop[line][lie] = 0;
    }
}