在由 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. animation,transition,transform小练习

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. openwrt_ipsec_function.sh 分析

    #!/bin/sh # # Copyright (C) Vitaly Protsko <villy@sft.ru> errno= # get_fieldval gate src " ...

  3. ipsec原理(转载)

    IPSec VPN是目前VPN技术中点击率非常高的一种技术,同时提供VPN和信息加密两项技术,这一期专栏就来介绍一下IPSec VPN的原理.IPSec VPN应用场景 IPSec VPN的应用场景分 ...

  4. 【JZOJ6342】Tiny Counting

    description analysis 首先不管\(a,b,c,d\)重复的情况方案数是正逆序对之积 如果考虑\(a,b,c,d\)有重复,只有四种情况,下面括号括起来表示该位置重复 比如\(\{a ...

  5. cocos2D-X 常用功能封装

    Packaging_Kernel.h #pragma once #include <string> #include <map> #include <vector> ...

  6. Hibernate与数据库交互方式和Hibernate常用的几个方法

    第一种,适合sql语言水平比较高的人用 HQL(Hibernate Query Language) 面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分 ...

  7. FP function programming

    fp是函数式编程,也是一种编程方法,同面向对象的编程方法一样. 所谓的functional programming 就是函数式编程,这也是一种编程方法,或者说是编程模式,同面向过程的编程,以及面向对象 ...

  8. error C2872: 'ULONG_PTR' : ambiguous symbol

    转自VC错误:http://www.vcerror.com/?p=74 问题描述: 错误:error C2872: 'ULONG_PTR' : ambiguous symbol 解决方法: 详细的解决 ...

  9. Python 日期和时间_python 当前日期时间_python日期格式化

    Python 日期和时间_python 当前日期时间_python日期格式化 Python程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 cal ...

  10. Python Fabric模块详解

    Python Fabric模块详解 什么是Fabric? 简单介绍一下: ​ Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...