LeetCode(959)由斜杠划分区域

LeetCode(959)由斜杠划分区域

Description:

在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。

(请注意,反斜杠字符是转义的,因此 \ 用 “\” 表示。)。

返回区域的数目。

示例1:

输入:
[
" /",
"/ "
]
输出:2

示例2:

输入:
[
" /",
"  "
]
输出:1

示例3:

输入:
[
"\\/",
"/\\"
]
输出:4

思路:

无非两种:

  1. DFS
  2. 并查集

代码:

  1. DFS:
char grid_ex[100][100];
int SIZE;

void expand(char **grid, int gridSize)
{
    for(int i=0;i<gridSize;i++)
    {
        for(int j=0;j<gridSize;j++)
        {
            if(grid[i][j]==' ')
            {
                grid_ex[3*i][3*j]=grid_ex[3*i][3*j+1]=grid_ex[3*i][3*j+2]=\
                grid_ex[3*i+1][3*j]=grid_ex[3*i+1][3*j+1]=grid_ex[3*i+1][3*j+2]=\
                grid_ex[3*i+2][3*j]=grid_ex[3*i+2][3*j+1]=grid_ex[3*i+2][3*j+2]=' ';
            }
            else if(grid[i][j]=='/')
            {
                grid_ex[3*i][3*j]=grid_ex[3*i][3*j+1]=grid_ex[3*i+1][3*j]=\
                grid_ex[3*i+1][3*j+2]=grid_ex[3*i+2][3*j+1]=grid_ex[3*i+2][3*j+2]=' ';
                grid_ex[3*i][3*j+2]=grid_ex[3*i+1][3*j+1]=grid_ex[3*i+2][3*j]='*';
            }
            else if(grid[i][j]=='\\')
            {
                grid_ex[3*i][3*j+2]=grid_ex[3*i+1][3*j]=grid_ex[3*i+1][3*j+2]=\
                grid_ex[3*i+2][3*j]=grid_ex[3*i][3*j+1]=grid_ex[3*i+2][3*j+1]=' ';
                grid_ex[3*i][3*j]=grid_ex[3*i+1][3*j+1]=grid_ex[3*i+2][3*j+2]='*';
            }
        }
    }
}

void dfs(int i, int j)//size = gridSize * 3
{
    grid_ex[i][j]='*';
    if(i-1>=0&&grid_ex[i-1][j]==' ')dfs(i-1,j);
    if(i+1<SIZE&&grid_ex[i+1][j]==' ')dfs(i+1,j);
    if(j-1>=0&&grid_ex[i][j-1]==' ')dfs(i,j-1);
    if(j+1<SIZE&&grid_ex[i][j+1]==' ')dfs(i,j+1);
    return;
}

int regionsBySlashes(char ** grid, int gridSize){
    SIZE = 3 * gridSize;
    expand(grid, gridSize);
    int count=0;
    for(int i=0;i<SIZE;i++)
    {
        for(int j=0;j<SIZE;j++)
        {
            if(grid_ex[i][j]==' ')
            {
                dfs(i, j);
                count++;
            }
        }
    }
    return count;
}
  1. 并查集就留给读者自己思考啦。
发布了6 篇原创文章 · 获赞 7 · 访问量 85

猜你喜欢

转载自blog.csdn.net/LordTech/article/details/104283392