回溯+DFS 强化
1020. 飞地的数量
思路:从4条边界出发,把能遍历到的1全部变成0。剩下的1就是边界所不能到达的点,统计一下1的数量即可。
解题思路:DFS。 时间超越100%python用户提交 ,内存超越84.75%的python用户提交。
class Solution(object):
def numEnclaves(self, A):
if not A or not A[0]: # 处理边缘测试用例
return 0
res = 0
self.m = len(A)
self.n = len(A[0])
for i in range(self.m):
self.dfs(A, i, 0) # 从左边界遍历
self.dfs(A, i, self.n-1) # 从有边界遍历
for i in range(self.n):
self.dfs(A, 0, i) # 从上边界遍历
self.dfs(A,self.m-1, i) # 从上边界遍历
for each in A:
res += sum(each) # 统计非零元素个数
return res def dfs(self, data, i, j):
if i < 0 or i >= self.m or j < 0 or j >= self.n or data[i][j]==0:
return
data[i][j] = 0
self.dfs(data, i+1, j)
self.dfs(data, i-1, j)
self.dfs(data, i, j+1)
self.dfs(data, i, j-1)
思路2:添加辅助空间visit 。从边界出发,找出边界所能直达的1节点,然后用1的总个数减去边界直达1的个数。
时间超越100%的python用户提交,内存超越100%的python用户提交。
class Solution(object):
def numEnclaves(self, A):
if not A or not A[0]: # 处理边缘测试用例
return 0
res = 0
self.count=0
self.m = len(A)
self.n = len(A[0])
self.index=[[0,1],[1,0],[0,-1],[-1,0]]
self.visited=[[0]*len(A[0]) for x in range(self.m)]
for i in range(self.m):
self.dfs(A, i, 0) # 从左边界遍历
self.dfs(A, i, self.n-1) # 右边界遍历
for i in range(self.n):
self.dfs(A, 0, i) # 从上边界遍历
self.dfs(A,self.m-1, i) # 从上边界遍历
for each in A:
res += sum(each) # 统计非零元素个数
return res-self.count def dfs(self, data, i, j):
if i<0 or i>=self.m or j<0 or j>=self.n or data[i][j]==0 or self.visited[i][j]==1:
return
if data[i][j] == 1:
self.visited[i][j]=1
self.count += 1
for each in self.index:
x = each[0]+i
y = j+each[1]
self.dfs(data,x,y)
回溯+DFS 强化的更多相关文章
- HDU 1010Tempter of the Bone(奇偶剪枝回溯dfs)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- POJ 3009 Curling 2.0【带回溯DFS】
POJ 3009 题意: 给出一个w*h的地图,其中0代表空地,1代表障碍物,2代表起点,3代表终点,每次行动可以走多个方格,每次只能向附近一格不是障碍物的方向行动,直到碰到障碍物才停下来,此时障碍物 ...
- 回溯 DFS 深度优先搜索[待更新]
首先申明,本文根据微博博友 @JC向北 微博日志 整理得到,本文在这转载已经受作者授权! 1.概念 回溯算法 就是 如果这个节点不满足条件 (比如说已经被访问过了),就回到上一个节点尝试别 ...
- POJ 3009 Curling 2.0 回溯,dfs 难度:0
http://poj.org/problem?id=3009 如果目前起点紧挨着终点,可以直接向终点滚(终点不算障碍) #include <cstdio> #include <cst ...
- Usaco 2.3 Zero Sums(回溯DFS)--暴搜
Zero SumConsider the sequence of digits from 1 through N (where N=9) in increasing order: 1 2 3 ... ...
- UVa 291 The House Of Santa Claus——回溯dfs
题意:从左下方的1开始,一笔画出圣诞老人的房子. #include <iostream> #include <cstring> using namespace std; ][] ...
- POJ 3414 dfs 回溯
题目链接:http://poj.org/problem?id=3414 题意:三个值A, B, C, A和B是两个杯子的容量,问最短操作数使A或者B里的水量是C.有三种操作. 思路:dfs.暴力 很简 ...
- 图之BFS和DFS遍历的实现并解决一次旅游中发现的问题
这篇文章用来复习使用BFS(Breadth First Search)和DFS(Depth First Search) 并解决一个在旅游时遇到的问题. 关于图的邻接表存储与邻接矩阵的存储,各有优缺点. ...
- nyoj 927 The partial sum problem(dfs)
描述 One day,Tom’s girlfriend give him an array A which contains N integers and asked him:Can you choo ...
随机推荐
- 域名动态解析到动态IP
一般宽带用户的IP都是动态IP,重连之后IP可能会发生变化. 如果想在其他地方连接家里的设备,或者在家中搭建服务器,就会受到影响. 现在提供一种动态解析域名的方式,只要检测到IP的变化,那么就调用阿里 ...
- 接口测试 - ti
脚本 主程序 #!/bin/bash . /etc/ti/ti.conf . /etc/ti/ti.fun #-basic.json | curl -H "Content-Type:appl ...
- !!常用HTML5代码
HTML5提供的新特性 2016-2-16 Web Socket 定义了一套API, 允许网页能够使用Web Socket协议来和远程主机进行双工通信. Web Storage 定义了一套API, 能 ...
- Exce 快捷键 tips
1. 填充快捷键 ctrl+R 向下填充 CTRL+D 向右填充 2. 筛选快捷键 CTRL+SHIFT+L 3. 移动到当前区域的边缘: Ctrl + shift + 方向箭头 4. 字符连接:& ...
- python 列表生成式,生成器&迭代器
列表生成式: 需求:要对列表 [0,1,2,3,4,5,6,7,8,9]的每个元素加1 用列表生成式一步搞定: li = [i+1 for i in range(10)] # 这种写法就叫列表生成式 ...
- Spring @Autowired注解在非Controller中注入为null
问题描述 今天在写一个工具类,里面用了@Autowired注入了StringRedisTemplate以及RedisTemplate时,在template.opsForValue().set(key, ...
- 基于前台vue,后台是spring boot的压缩图片上传
本人是刚毕业的新手,最近公司的一个项目,前后端分离,前端Vue,后端使用spring boot.其中有一个需求是需要做前端上传的图片需要压缩才能上传.为此在网上查找资料,并做了简单的实现. 那么一步来 ...
- Python中的split()函数的用法
函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(lis ...
- 如何安装MySQL5.5.62
1.首先进入官网https://www.mysql.com MySQL分为社区版和商业版,社区版是免费的,这里选择社区版的. 2.此时选择一个比较简单的5.5版本 直接下载Wisndow(X86,32 ...
- JAVA SpringBoot2 关于 JSON 数据处理,基于 ObjectMapper
1,当今的互联网开发行业,JSON 这种数据格式越来越成为网络开发的主流,尤其是前后端分离之后,几乎百分百的数据交互方式都是采用 JSON 2,由于 SpringMVC 框架的封装性,我们日常开发中只 ...