题目描述
在一个nxm矩阵形状的城市里爆发了洪水,洪水从(0,0)的格子流到这个城市,在这个矩阵中有的格子有一些建筑,洪水只能在没有建筑的格子流动。请返回洪水流到(n - 1,m - 1)的最早时间(洪水只能从一个格子流到其相邻的格子且洪水单位时间能从一个格子流到相邻格子)。
给定一个矩阵map表示城市,其中map[i][j]表示坐标为(i,j)的格子,值为1代表该格子有建筑,0代表没有建筑。同时给定矩阵的大小n和m(n和m均小于等于100),请返回流到(n - 1,m - 1)的最早时间。保证洪水一定能流到终点。
思路:使用bfs,用两个队列分别存放x于y坐标。每次从队列中取出当前结点,然后对它可以流向的四个方向进行判断,如果可以流加入队列。后面那个return 随便写什么都可以。
import java.util.*;
public class Flood {
public int floodFill(int[][] map, int n, int m) {
// write code here
if(m==0||n==0)return 0;
int [][]direction={{0,1},{0,-1},{1,0},{-1,0}};//上下左右四个方向流动
Queue<Integer>queuex =new LinkedList<>();
Queue<Integer>queuey =new LinkedList<>();
map[0][0]=0;
queuex.offer(0);
queuey.offer(0);
while(!queuex.isEmpty()){
int x = queuex.poll();
int y = queuey.poll();
if(x==n-1&&y==m-1)return map[n-1][m-1];
for(int i=0;i<4;i++){
int nextx = x+direction[i][0];
int nexty = y+direction[i][1];
if(nextx>=0&&nextx<n&&nexty>=0&&nexty<m&&map[nextx][nexty]==0){
map[nextx][nexty] = map[x][y]+1;
queuex.offer(nextx);
queuey.offer(nexty);
}
}//for
}//while
return map[n-1][m-1];
}
}