2026/2/12 16:31:39
网站建设
项目流程
上海公司做网站的价格,在深圳做的网站好做吗,怎么做一个个人网页,网站服务器租用价格怎么算一、题目描述二、算法原理思路#xff1a;使用 BFS 算法先处理边界 1 #xff0c;再使用 BFS 统计陆地#xff0c;体现正难则反的思想#xff1b;例如#xff1a;1#xff09;创建一个二维数组来专门标记是否入过队列或者说遍历过#xff1b;2#xff09;使用 BFS 算法…一、题目描述二、算法原理思路使用 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] 1) { vis[a][b] true; que.push({a,b}); count; } } } return count; } };