[程序员代码面试指南]数组和矩阵-求最短通路值(BFS)
作者:互联网
题意
给二维矩阵 1、0组成,问从左上角到右下角的最短通路值。
题解
BFS基础。头节点入队;对队内每个节点判断、处理,符合条件的入队;到了终点节点返回。
相关知识
Queue为接口,LinkedList为该接口的一个实现。
代码
public class Main {
public static void main(String args[]) {
int m[][]= {{1,0,1,1,1},{1,0,1,0,1},{1,1,1,0,1},{0,0,0,0,1}};
int ans=minPathVal(m);
System.out.println(ans);
}
public static int minPathVal(int[][] m) {
if(m==null) {
return 0;
}
int[][] dis=new int[m.length][m[0].length];
dis[0][0]=1;
Queue<Integer> rQ=new LinkedList<>();//
Queue<Integer> cQ=new LinkedList<>();
rQ.add(0);
cQ.add(0);
int res=0;
int r;
int c;
int dx[]={0,0,-1,1};//
int dy[]= {-1,1,0,0};
while(!rQ.isEmpty()) {
r=rQ.poll();
c=cQ.poll();
if(r==m.length-1&&c==m[0].length-1) {
return dis[r][c];
}
for(int i=0;i<4;++i) {
int x=r+dx[i];
int y=c+dy[i];
if(check(x,y,m,dis)) {
dis[x][y]=dis[r][c]+1;
rQ.add(x);
cQ.add(y);
}
}
}
return res;
}
public static boolean check(int x,int y,int[][] m,int[][] dis) {
return x>=0&&x<m.length&&y>=0&&y<m[0].length&&m[x][y]==1&&dis[x][y]==0;
}
}
标签:rQ,int,矩阵,BFS,程序员,length,new,cQ,LinkedList 来源: https://www.cnblogs.com/coding-gaga/p/10976112.html