玖玖国产:匠心筑梦,国潮新生

核心内容摘要

人人摸:指尖上的温度,触碰生活的诗意
Mafos:开启免费下载新纪元,无限精彩,即刻拥有!

探秘91精品福利网:最新资源下载,从未如此简单!

题目描述

算法原理思路使用 BFS 算法先处理边界 1 再使用 BFS 统计陆地体现正难则反的思想例如1创建一个二维数组来专门标记是否入过队列或者说遍历过2使用 BFS 算法标记边界为 1 的情况3此时整个只有中间被0围起来的1为陆地

代码实现class Solution { int dx[4] {1,-1,0,0}; int dy[4] {0,0,-1,1}; typedef pairint,int PII; int n,m; public: int numEnclaves(vectorvectorint grid) { n grid.size(); m grid[0].size(); vectorvectorbool vis(grid.size(),vectorbool(grid[0].size(),false));//标记遍历过的数组 for(int i 0; i m; i)//处理边界1 { Bfs(0,i,grid,vis); Bfs(n - 1,i,grid,vis); } for(int i 0; i n; i)//处理边界1 { Bfs(i,0,grid,vis); Bfs(i,m - 1,grid,vis); } int ret 0; for(int i 0; i n; i)//此时中间的 1 就是陆地 { for(int j 0; j m; j) { if(vis[i][j] false grid[i][j]) { ret Bfs(i,j,grid,vis); } } } return ret; } int Bfs(int i,int j,vectorvectorint grid,vectorvectorbool vis)//BFS 算法 { if(grid[i][j] ! 1 || vis[i][j] ! false) return 0; queuePII que; que.push({i,j}); vis[i][j] true; int count 1; while(que.size()) { auto [x,y] que.front(); que.pop(); for(int v 0; v 4; v) { int a x dx[v]; int b y dy[v]; if(a 0 a n b 0 b m vis[a][b] false grid[a][b]

{ vis[a][b] true; que.push({a,b}); count; } } } return count; } };

妲己直播官方版-妲己直播官方版应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123