zoukankan      html  css  js  c++  java
  • LeetCode 130. 被围绕的区域 (DFS)

    题目链接:https://leetcode-cn.com/problems/surrounded-regions/

    给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。

    找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。

    示例:

    X X X X
    X O O X
    X X O X
    X O X X
    运行你的函数后,矩阵变为:

    X X X X
    X X X X
    X X X X
    X O X X
    解释:

    被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

    思路:先对边缘进行判断,将边缘部分能够相连的变为O其他的都为X.

     1 int dx[4]={1,-1,0,0};
     2 int dy[4]={0,0,1,-1}; 
     3 void dfs(char** grid, int gridSize, int* gridColSize,int x,int y)
     4 {
     5     int i,j;
     6     grid[x][y]='0';
     7     for(i=0;i<4;i++){
     8         int nx=x+dx[i],ny=y+dy[i];
     9         if(nx>=0&&nx<gridSize&&ny>=0&&ny<gridColSize[0]&&grid[nx][ny]=='O'){
    10             grid[nx][ny]='0';
    11             dfs(grid,gridSize,gridColSize,nx,ny);
    12         }
    13     }
    14     return ;  
    15 }
    16 void solve(char** board, int boardSize, int* boardColSize){
    17     if(board==NULL||boardSize==0) return ;
    18     int i,j;
    19     for(i=0,j=0;i<boardSize;i++){
    20         if(board[i][j]=='O'){
    21             dfs(board,boardSize,boardColSize,i,j);
    22         }
    23     }
    24     for(i=0,j=boardColSize[0]-1;i<boardSize;i++){
    25         if(board[i][j]=='O'){
    26             dfs(board,boardSize,boardColSize,i,j);
    27         }
    28     }
    29     for(j=0,i=0;j<boardColSize[0];j++){
    30         if(board[i][j]=='O'){
    31             dfs(board,boardSize,boardColSize,i,j);
    32         }
    33     }
    34     for(j=0,i=boardSize-1;j<boardColSize[0];j++){
    35         if(board[i][j]=='O'){
    36             dfs(board,boardSize,boardColSize,i,j);
    37         }
    38     }
    39     for(i=0;i<boardSize;i++){
    40         for(j=0;j<boardColSize[0];j++){
    41             if(board[i][j]=='O'){
    42                 board[i][j]='X';
    43             }else if(board[i][j]=='0'){
    44                 board[i][j]='O';
    45             }
    46         }
    47     }
    48 }
  • 相关阅读:
    Key&Main Window
    ObjectiveC Runtime IV 【使用隐藏的参数】
    JS中的变量作用域
    Git配置
    ObjectiveC Runtime II 【发送消息 vs 调用函数】
    GDB Vs. WinDbg Commands
    mcs51 串口通信 单片机发 pc收
    csharp截屏
    解决WIN7系统中系统文件的“拒绝访问”的方案
    在VC中创建DLL文件的方法步骤
  • 原文地址:https://www.cnblogs.com/wydxry/p/12484395.html
Copyright © 2011-2022 走看看