994. 腐烂的橘子
解法一:DFS
1 int dx[4]={-1,0,1,0}; 2 int dy[4]={0,-1,0,1}; 3 class Solution { 4 public: 5 //这里需要对普通的DFS进行一定的处理,即DFS进化版本。。。 6 void dfs(vector<vector<int>>& grid,int i,int j,int res){ 7 if(i<0||j<0||i>=grid.size()||j>=grid[0].size())return ; 8 if(grid[i][j]!=1&&grid[i][j]<res)return ;//预防不符合条件的再次访问。。。 9 grid[i][j]=res; 10 res++; 11 12 for(int k=0;k<4;k++){ 13 int x=dx[k]+i,y=dy[k]+j; 14 dfs(grid,x,y,res); 15 } 16 } 17 int orangesRotting(vector<vector<int>>& grid) { 18 int m=grid.size(); 19 int n=grid[0].size(); 20 21 for(int i=0;i<m;i++){ 22 for(int j=0;j<n;j++){ 23 if(grid[i][j]==2){ 24 dfs(grid,i,j,2);//很好解决我没法解决的问题。。。 25 } 26 } 27 } 28 int cnt=0; 29 for(int i=0;i<m;i++){ 30 for(int j=0;j<n;j++){ 31 if(grid[i][j]==1)return -1; 32 else{ 33 cnt=max(cnt,grid[i][j]); 34 //cout<<cnt<<endl; 35 } 36 } 37 } 38 if(cnt==0)return 0; 39 return cnt-2; 40 41 42 } 43 };
解法二:BFS
1 int dx[4]={-1,0,1,0}; 2 int dy[4]={0,-1,0,1}; 3 class Solution { 4 public: 5 int orangesRotting(vector<vector<int>>& grid) { 6 queue<pair<int,int>>que; 7 int m=grid.size(); 8 int n=grid[0].size(); 9 for(int i=0;i<m;i++){//初始化 10 for(int j=0;j<n;j++){ 11 if(grid[i][j]==2){ 12 que.push({i,j}); 13 } 14 } 15 } 16 int res=0; 17 while(!que.empty()){ 18 int k=que.size(); 19 bool flag=false; 20 for(int i=0;i<k;i++){ 21 pair<int,int>q=que.front(); 22 que.pop(); 23 int f1=q.first,f2=q.second; 24 for(int j=0;j<4;j++){ 25 int x=dx[j]+f1,y=dy[j]+f2; 26 if(x>=0&&y>=0&&x<m&&y<n&&grid[x][y]==1){ 27 flag=true; 28 grid[x][y]=2; 29 que.push({x,y}); 30 } 31 } 32 } 33 if(flag)res++; 34 } 35 for(int i=0;i<m;i++){ 36 for(int j=0;j<n;j++){ 37 if(grid[i][j]==1)return -1; 38 } 39 } 40 return res; 41 } 42 };
原文地址:https://www.cnblogs.com/zb121/p/12417196.html
时间: 2024-10-29 15:44:52