题解 | #迷宫问题#给刘思光的答案3之回溯法

迷宫问题

http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

package m6_18;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Migong3 {
    static ArrayList<int[]> rss;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int k1 = in.nextInt();
        int k2 = in.nextInt();
        int[][] data = new int[k1][k2];
        for (int i = 0; i < k1; i++) {
            for (int j = 0; j < k2; j++) {
                data[i][j] = in.nextInt();
            }
        }
        ArrayList<int[]> list = new ArrayList();
        list = fun(data, 0, 0, list, false);

        for (int[] ints : rss) {
            System.out.println("(" + ints[0] + "," + ints[1] + ")");
        }


    }
    
    //回溯寻找,即深度优先搜索
    private static ArrayList<int[]> fun(int[][] data, int x, int y, ArrayList<int[]> list, boolean back) {
        if (x == data.length - 1 && y == data[0].length - 1) {
            list.add(new int[]{x,y});
            rss=list;
            return list;
        }
        if (!back) {
            list.add(new int[]{x, y});
        }
        data[x][y] = 1;
        if (x - 1 >= 0 && data[x - 1][y] != 1) {
            fun(data, x - 1, y, list, false);
        } else if (x + 1 < data.length && data[x + 1][y] != 1) {
            fun(data, x + 1, y, list, false);
        } else if (y - 1 >= 0 && data[x][y - 1] != 1) {
            fun(data, x, y - 1, list, false);
        } else if (y + 1 < data[0].length && data[x][y + 1] != 1) {
            fun(data, x, y + 1, list, false);
        } else {
            list.remove(list.size() - 1);
            fun(data, list.get(list.size() - 1)[0], list.get(list.size() - 1)[1], list, true);
        }
        return list;
    }

}

作业:此方法含有重大bug,请刘思光同学谨慎辨别学习并修改

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务