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

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

返回区域的数目。

示例 1:

输入: [   " /",   "/ " ] 输出:2 解释:2x2 网格如下:

示例 2:

输入: [   " /",   " " ] 输出:1 解释:2x2 网格如下:

示例 3:

输入: [   "\\/",   "/\\" ] 输出:4 解释:(回想一下,因为 \ 字符是转义的,所以 "\\/" 表示 \/,而 "/\\" 表示 /\。) 2x2 网格如下:

示例 4:

输入: [   "/\\",   "\\/" ] 输出:5 解释:(回想一下,因为 \ 字符是转义的,所以 "/\\" 表示 /\,而 "\\/" 表示 \/。) 2x2 网格如下:

示例 5:

输入: [   "//",   "/ " ] 输出:3 解释:2x2 网格如下:

提示:

  1. 1 <= grid.length == grid[0].length <= 30
  2. grid[i][j] 是 '/'、'\'、或 ' '。

思路转换一下,然后再搜索就可以了。

最开始是将大小 * 2,但是在{"//", "/ "};这个案列中就错误了,仔细想想为什么。

然后换成 * 3的就可以了。

class Solution {
public:
vector<vector<bool> > Map;
vector<vector<bool> > Visit;
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
int N;
int regionsBySlashes(vector<string>& grid)
{
N = grid.size();
Map = vector<vector<bool> >(N * 3, vector<bool>(N * 3, false));
Visit = vector<vector<bool> >(N * 3, vector<bool>(N * 3, false));
int cntAns = 0;
for(int i = 0; i < N; i++)
{
for(int j = 0; j < grid[i].size(); j++)
{
if(grid[i][j] == '\\')
{
Map[3 * i][3 * j] = true;
Map[3 * i + 1][3 * j + 1] = true;
Map[3 * i + 2][3 * j + 2] = true;
}
else if(grid[i][j] == '/')
{
Map[3 * i][3 * j + 2] = true;
Map[3 * i + 1][3 * j + 1] = true;
Map[3 * i + 2][3 * j] = true;
}
}
}
/*
for(int i = 0; i < 3 * N; i++)
{
for(int j = 0; j < 3 * N; j++)
{
cout << Map[i][j] << (j == 3 * N - 1? '\n' : ' ');
}
}
//*/
for(int i = 0; i < 3 * N; i++)
{
for(int j = 0; j < 3 * N; j++)
{
if(Map[i][j] == false && Visit[i][j] == false)
{
cntAns++;
BFS(i , j);
}
}
}
return cntAns;
} void BFS(int x, int y)
{
queue<pair<int, int> > q;
q.push(make_pair(x, y));
Visit[x][y] = true;
while(!q.empty())
{
int i = q.front().first;
int j = q.front().second;
q.pop();
for(int k = 0; k < 4; k++)
{
int ii = i + dx[k];
int jj = j + dy[k];
if(ii < 0 || ii >= 3 * N || jj < 0 || jj >= 3 * N)
continue;
if(Visit[ii][jj] == true || Map[ii][jj] == true)
continue;
Visit[ii][jj] = true;
q.push(make_pair(ii, jj));
}
}
}
};

方法二:

并查集(未想出,带更新)

Leetcode959. Regions Cut By Slashes由斜杠划分区域的更多相关文章

  1. 【LeetCode】959. Regions Cut By Slashes 由斜杠划分区域(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题思路 代码 日期 题目地址:https://leetcod ...

  2. LC 959. Regions Cut By Slashes

    In a N x N grid composed of 1 x 1 squares, each 1 x 1 square consists of a /, \, or blank space.  Th ...

  3. [Swift]LeetCode959. 由斜杠划分区域 | Regions Cut By Slashes

    In a N x N grid composed of 1 x 1 squares, each 1 x 1 square consists of a /, \, or blank space.  Th ...

  4. 【leetcode】959. Regions Cut By Slashes

    题目如下: In a N x N grid composed of 1 x 1 squares, each 1 x 1 square consists of a /, \, or blank spac ...

  5. LeetCode 959. Regions Cut By Slashes

    原题链接在这里:https://leetcode.com/problems/regions-cut-by-slashes/ 题目: In a N x N grid composed of 1 x 1 ...

  6. mysql 列名中 包含斜杠或者空格的处理方式

    今天客户那边遇到了一个比较奇葩的问题跑来问我,这个问题比较冷门,所以特别记录下. 问题描述 数据库的字段存在斜杠或者空格的时候,怎么用sql进行insert或者select操作. 问题解答 对于这种特 ...

  7. JAVA正则表达式中如何匹配反斜杠 \

    有时候我们需要匹配反斜杠,你可能会把对应的正则表达式写成 "\\" 然后可能会有如下输出: Exception in thread "main" java.ut ...

  8. (转载)PHPCMS V9专题路径多了一个斜杠的解决办法

    PHPCMSV9的专题,在设置生成静态并且网站的静态设置成生成在根目录的时候,专题路径的URL中会多出一个斜杠,如:http://www.2cto.com//special/ddos/ ,我只能说这是 ...

  9. 【转】python中的正斜杠、反斜杠

    原文地址:http://www.cnblogs.com/followyourheart1990/p/4270566.html 首先,"/"左倾斜是正斜杠,"\" ...

随机推荐

  1. vue 兄弟组件的传值

    handleLetterClick方法,采用emit 传递给父组件 父组件触发的方法: handleLetterChange方法: 父组件传递给子组件: CityList组件:   兄弟组件的传值可以 ...

  2. delphi 第4课

    try 语句;(正常)except 语句; (意外处理部分) end: 例子: begin sum:=; try n:=strtoint(edit1.Text); except showMessage ...

  3. Windows dir

    显示目录中的文件和子目录列表. DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]  [/O[[:]so ...

  4. 【转载】浅谈Linux内存管理机制

    经常遇到一些刚接触Linux的新手会问内存占用怎么那么多? 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在 ...

  5. hadoop Datanode多目录配置

    1. DataNode也可以配置成多个目录,每个目录存储的数据不一样.即:数据不是副本2.具体配置如下 hdfs-site.xml <property> <name>dfs.d ...

  6. 谈谈域名DNS的缓存问题

    可以从很多地方看到,许多刚开始做站的朋友,对域名设置方面的知识原理一知半解,以至于为了某些测试需要,经常对域名解析大动干戈.今天改个A记录,明天又换个NS.又或者,在迁移域名,迁移网站的时候的时候由于 ...

  7. VS2010-MFC(MFC常用类:CFile文件操作类)

    转自:http://www.jizhuomi.com/software/234.html CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作 ...

  8. Mysql配置innodb_flush_log_at_trx_commit

    当innodb_flush_log_at_trx_commit被 设置为0,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作.当这个值为1(默认值)之 ...

  9. 一个小村庄的烦恼(netty-nio)

    背景:一座大山有个小村庄,住着几百户人家,隔着大山那边几十里山路,有个小集市,家家户户经常翻山越岭买日用品,苦不堪言(同步阻塞,单线程,每户人家一个线程,去赶集了,今天也干不了别的活). 后来村长看着 ...

  10. .NET中DataTable的常用操作

    一.目的 在各种.NET开发中,DataTable都是一个非常常见且重要的类型,在与数据打交道的过程中可以说是必不可少的对象. 它功能强大,属性与功能也是相当丰富,用好的话,使我们在处理数据时,减少很 ...