力扣994.腐烂的橘子
第一次广度优先算法遍历图用了两个队列100%17.50%class Solution { public: //广度优先遍历 int dp[4][2] {{0,1},{0,-1},{1,0},{-1,0}}; int orangesRotting(vectorvectorint grid) { int count 0; queueint q_x; queueint q_y; //初始化 for(int i 0;i grid.size();i){ for(int j 0;j grid[0].size();j){ if(grid[i][j] 2){ q_x.push(i); q_y.push(j); } } } while(!q_x.empty()){ int n q_x.size(); for(int i 0;i n;i){ int x q_x.front(); int y q_y.front(); q_x.pop(); q_y.pop(); for(int j 0;j 4;j){ if(x dp[j][0] grid.size() x dp[j][0] 0 y dp[j][1] grid[0].size() y dp[j][1] 0){ if(grid[x dp[j][0] ][y dp[j][1] ] 1){ q_x.push(x dp[j][0]); q_y.push(y dp[j][1]); grid[x dp[j][0] ][y dp[j][1] ] 2; } } } } if(!q_x.empty()) count; } for(int i 0;i grid.size();i){ for(int j 0;j grid[0].size();j){ if(grid[i][j] 1){ return -1; } } } return count; } };经评论区点播可以将坐标ij存储成x i * column j 因为 j column 所以i x /column;j x % column;以此降低内存消耗 时间 100%空间88.79%class Solution { public: //广度优先 //调用了几次bfs //加入队列队列值qi*cj,其中c是列数 //则i q/cj q%c //最后一次会多记一次 int orangesRotting(vectorvectorint grid) { int row grid.size(); int column grid[0].size(); int res 0; //将初始的腐烂的橘子放入队列中 queueint queue; for(int i 0;i row;i) for(int j 0;j column;j) { if(grid[i][j] 2) queue.push(i*columnj); } //深度优先算法 while(queue.size()){ int n queue.size(); for(int x 0;x n;x){ int y queue.front(); queue.pop(); int i y/column; int j y%column; //感染周围的橘子并将其加入队列,上下左右 if((i - 1) 0 grid[i-1][j] 1){ grid[i-1][j] 2; queue.push((i-1)*columnj); } if((i1)row grid[i1][j] 1){ grid[i1][j] 2; queue.push((i1)*columnj); } if((j-1) 0 grid[i][j-1] 1){ grid[i][j-1] 2; queue.push(i*column j-1); } if((j1) column grid[i][j1] 1){ grid[i][j1] 2; queue.push(i*column j1); } } res; } //如果有橘子没被感染返回-1 for(int i 0;i row;i) for(int j 0;j column;j) if(grid[i][j] 1) return -1; //res 0,没坏掉的橘子返回0 if(res 0) return 0; return res-1; } };
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2554571.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!