回溯+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 ...
随机推荐
- (转)并发编程 – Concurrent 用户指南
原文出处: 高广超 译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/in ...
- 使用python函数持续监控电脑cpu使用率、内存、c盘使用率等
方法一: # import time 导入time模块 # import psutil 导入psutil模块 # def func(): # while True: ------->持续监控得w ...
- 个人简介HTML
码云链接:https://gitee.com/lengxiaoyixuan222/codes/z4dxnvr0ce2blpkihsg7985 源代码: <!doctype html> &l ...
- IntelliJ IDEA SVN突然没有了
1.在IDEA中找不到 SVN 的选项了,版本控制工具中没有subversion,在setting中也无法查询到对应的svn工具,这是因为我们在idea的svn插件中把svn这个选项禁用了 解决办法: ...
- 【学习】数据规整化:清理、转换、合并、重塑(续)【pandas】
@合并重叠数据 还有一种数据组合问题不能用简单的合并或连接运算来处理.比如说,你可能有索引全部或部分重叠的两个数据集 使用numpy的where函数,它用于表达一种矢量化的if - else a = ...
- Anatomy of a Database System学习笔记 - 存储管理
使用裸设备,还是使用文件系统? 描述 pros cons 裸设备 顺序读磁盘快比随机要快10-100倍,DB比OS更懂磁盘负载,因此很多DB是直接管理数据块如何存放的. DB对裸设备的管理,比文件 ...
- Linux充电站
[Ansible中文权威指南] [鸟哥的linux私房菜] AWK使用手册 Centos的epel源下载 Ceph国内社区 chef简明手册 ChinaUnix运维文库 Confluence和Jira ...
- Linux 总线、设备、驱动模型 与 设备树
1.总线.设备.驱动模型 本着高内聚.低耦合的原则,Linux 把设备驱动模型分为了总线.设备和驱动三个实体,这三个实体在内核里的职责分别如下: 设备和驱动向总线进行注册,总线负责把设备和对应的驱动绑 ...
- MySQL中链接查询inner join与left join使用
连接查询其实就是对两个表记录做笛卡尔乘积.如果不指定连接条件的话,则会对每行都做笛卡尔乘积,这样最后返回的结果树就会是两个表记录数的乘积:如果指定则,则仅对符合列条件的行进行笛卡尔乘积,并返回结果.在 ...
- Servlet学习记录2
读取web.xml参数 上篇文章ImageServlet里只设置了JPG,GIF,DOC类型文件的Content-Type.如果这时候需求变化了,需要增加Excel文件格式的Content-Type, ...