[程序员代码面试指南]数组和矩阵-求最短通路值(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;
    }
}
上一篇:rsync


下一篇:原来js让任务栏闪烁这么简单