最短路径-迷宫类

自动驾驶技术这个词因Tesla为人们所熟悉,殊不知tesla仍只是处于非常初级辅助阶段,然而Uber与Volvo已经开始在匹兹堡试验部署真正意义的自动驾驶汽车,原理是在构建好的复杂地图数据基础上,根据在车辆移动时通过GPS结合车上的数个传感器、立体摄像头以及激光雷达收集数据与地图数据比对以此来识别交通标志、行人和障碍物并选择合适的道路自动讲乘客从A点带到B点。假设我们将地图抽象成一个N x N的二维矩阵,0为可行驶道路1为障碍物,车辆只能一步步按东、南、西、北方向行驶,请输出从A点[0,0]至B点[n-1,n-1]的最少步数(移动一次计一步)。

输入

一共n行,每行n个整数(空格分隔),只可能为0或1。  

 样例输入

0 1 0 0

0 0 0 1

1 0 1 0

0 0 0 0

输出

 输出最短距离步数,不可到达则输出-1。       6

分析:1.用回溯法来解决问题,每次走过的路径标志“1”。

 1 import java.util.*;
 2 public class minPath{
 3     private static int min = 0; //保存最小路径
 4     private static int temp=0;
 5   private static void getMinPath(int[][] arr,int row,int col,int len){
 6       if(row<0 || row>len-1 || col<0 || col>arr[0].length-1)
 7         return ;           
 8         if(row==len-1 && col==len-1){
 9             if(min ==0)
10               min = temp;
11               if(min>temp)
12               min=temp;
13         }else {
14             if(arr[row][col] ==0){
15               arr[row][col]=1;
16               temp++;
17               getMinPath(arr,row+1,col,len);
18               getMinPath(arr,row,col+1,len);
19                getMinPath(arr,row-1,col,len);
20                getMinPath(arr,row,col-1,len);
21               temp--;
22               arr[row][col]=0;
23             }
24         }
25   }
26   public static void main(String[] args){
27     Scanner sc = new Scanner(System.in);
28       String s = sc.nextLine();
29       String[] str = s.split(" ");
30       int n = str.length;
31       int[][] arr = new int[n][n];
32       for(int i=0;i<n;i++)
33           arr[0][i] = Integer.parseInt(str[i]);
34       for(int i=1;i<n;i++){
35           for(int j=0;j<n;j++){
36               arr[i][j]=sc.nextInt();
37           }
38       }
39     getMinPath(arr,0,0,n);
40     if(min ==0)
41       System.out.println(-1);
42     else{
43         System.out.println(min);
44     }
45   }
46 }

 

posted @ 2017-05-25 16:26  落叶已归根  阅读(403)  评论(0编辑  收藏  举报