中级农民
- 积分
- 239
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-3-24
- 最后登录
- 1970-1-1
|
按照您的指导 俺又写了一个 但是觉得dp能加快速度 免去了不必要的dfs >.< 再次求指导~~ 哈哈 您约得什么时候的面试呀?- int money = Integer.MAX_VALUE;
- ArrayList<Point> path = new ArrayList<Point>();
-
- public ArrayList<Point> minCostPath(int[][] matrix){
- if(matrix == null || matrix.length == 0) return path;
-
- int[][] cost = new int[matrix.length][matrix[0].length];
- for(int i = 0; i < cost.length; i++){
- Arrays.fill(cost[i], Integer.MAX_VALUE);
- }
-
-
- boolean[][] visited = new boolean[matrix.length][matrix[0].length];
- ArrayList<Point> temp = new ArrayList<Point>();
- dfs3(matrix, cost, visited, 0, 0, 0, temp);
-
- return path;
- }
-
- private void dfs3(int[][] matrix, int[][] cost, boolean[][] visited, int x, int y, int cur, ArrayList<Point> temp){
- if(x < 0 ||x >= matrix.length || y < 0 || y >= matrix[0].length || visited[x][y] == true) return;
-
- if(cur >= cost[x][y]) return;
-
- visited[x][y] = true;
- cost[x][y] = cur;
- temp.add(new Point(x, y));
-
- if(matrix[x][y] == 9){
- //System.out.println(money);
- //money = Math.min(cur, money);
- money = cur;
- path = new ArrayList<Point>(temp);
- }else{
- if(matrix[x][y] == 5){
- //cost[x][y] = Math.min(cost[x][y], cur + 1);
- cost[x][y] = cur + 1;
- }
- // System.out.println(x + " " + y + " " + cost[x][y]);
- int[] surroundx = new int[]{-1, 1, 0, 0};
- int[] surroundy = new int[]{0, 0, -1, 1};
-
- for(int i = 0; i < 4; i++){
- dfs3(matrix, cost, visited, x + surroundx[i], y + surroundy[i], cost[x][y], temp);
- }
- }
- visited[x][y] = false;
- temp.remove(temp.size() - 1);
-
- }
复制代码 |
|