1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| public int shortestBridge(int[][] grid) { int row=grid.length; int col=grid[0].length; int[] dx=new int[]{0,0,1,-1}; int[] dy=new int[]{1,-1,0,0}; a:for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if(grid[i][j]==1){ set(grid,i,j,row,col); break a; } } } Deque<int[]> q=new LinkedList<>(); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if(grid[i][j]==2){ q.offer(new int[]{i,j}); } } } int depth=0; while(!q.isEmpty()){ int size=q.size(); while(size-->0){ int[] cur=q.poll(); int i=cur[0]; int j=cur[1]; for (int k = 0; k < 4; k++) { int x=i+dx[k]; int y=j+dy[k]; if(x<0 || x>=row || y<0 || y>=col || grid[x][y]==2){ continue; } if(grid[x][y]==1){ return depth; } q.offer(new int[]{x,y}); grid[x][y]=2; } } depth++; } return 0; }
void set(int[][] grid, int i, int j, int row, int col){ if(i<0 || i>=row || j<0 || j>=col || grid[i][j]!=1){ return; } grid[i][j]=2; set(grid,i+1,j,row,col); set(grid,i-1,j,row,col); set(grid,i,j+1,row,col); set(grid,i,j-1,row,col); }
|