日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode1020. 飞地的数量(dfs)

發布時間:2023/11/29 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode1020. 飞地的数量(dfs) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給出一個二維數組 A,每個單元格為 0(代表海)或 1(代表陸地)。

移動是指在陸地上從一個地方走到另一個地方(朝四個方向之一)或離開網格的邊界。

返回網格中無法在任意次數的移動中離開網格邊界的陸地單元格的數量。

示例 1:

輸入:[[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
輸出:3
解釋:
有三個 1 被 0 包圍。一個 1 沒有被包圍,因為它在邊界上。

解題思路

從網格邊界出發,像網格內部進行深度優先搜索,將可到達的地方全部置為水域,最后遍歷矩陣,找出無法到達的陸地。

代碼

class Solution {public int numEnclaves(int[][] A) {int[][] dir=new int[][]{{-1,0},{1,0},{0,1},{0,-1}};for(int i=0;i<A.length;i++)//遍歷邊界{Enclaves(A, dir,i,0);Enclaves(A, dir,i,A[0].length-1);}for(int i=0;i<A[0].length;i++){Enclaves(A, dir,0,i);Enclaves(A, dir,A.length-1,i);}int ans=0;for(int i=1;i<A.length-1;i++)for(int j=1;j<A[0].length-1;j++)if(A[i][j]==1) ans++;return ans;}public void Enclaves(int[][] A,int[][] dir,int x,int y) {if(x<0||y>=A[0].length||y<0||x>=A.length)return ;if(A[x][y]==0) return ;A[x][y]=0;for(int[] d:dir){int nextX=d[0]+x,nextY=d[1]+y;Enclaves(A, dir, nextX, nextY);}} }

總結

以上是生活随笔為你收集整理的leetcode1020. 飞地的数量(dfs)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。