11.连通域问题

问题描述

问题分析

所有的矩阵连通域问题都是用递归方式解决,可以总结出一套通用的算法,就是首先处理当前位置的元素,然后根据题目的连通域设置,对周围4领域或者8邻域进行递归处理。

代码

class Solution {
public:
    
    void Change(vector<vector<char>> &board,int i,int j)
    {
        int m=board.size();
        int n=board[0].size();
        //截至条件
        if( (i<0||i>=m) || (j<0||j>=n) || board[i][j]=='X'|| board[i][j]=='L') return ;
        //4邻域进行遍历递归
        board[i][j]='L';
        Change(board,i-1,j);
        Change(board,i,j+1);
        Change(board,i+1,j);
        Change(board,i,j-1);
    }
    
    
    void solve(vector<vector<char>> &board) 
    {
        //只处理四周的一圈
        for(int i=0;i<board.size();i++)
        {
            for(int j=0;j<board[0].size();j++)
            {
                if(i==0||i==(board.size()-1)||j==0||(j==board[0].size()-1)) 
                Change(board,i,j);
            }
        }

        //将包围的O全部置为X;
        for(int i=0;i<board.size();i++)
        {
            for(int j=0;j<board[0].size();j++)
            {
                if(board[i][j]=='L') board[i][j]='O';
                else{ board[i][j]='X';}
            }
        }
        
    }
};

猜你喜欢

转载自blog.csdn.net/feng__shuai/article/details/81624791