• [程序员代码面试指南]数组和矩阵-求最短通路值(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;
    	}
    }
    
  • 相关阅读:
    【BZOJ2329】括号修复(splay)
    连接数据库
    文件锁
    带进度条的输入流
    文件对话框
    使用Scanner来解析文件
    IO流(数据流
    IO流(随机流,数组内存流
    IO流文件字符输入输出流,缓冲流
    IO流(文件字节输入输出
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10976112.html
Copyright © 2020-2023  润新知