回溯+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 ...
随机推荐
- 机器学习笔记之三-yolov3+win7+vs2017+gpu+opencv编译
1.环境安装 1.1 vs2017+cuda9.1+cudnn7.0可以和tensorflow一起安装网上教程多,不多说. 唯一需要注意的是vs2017要安装好2015版本的工具集v140 ...
- arrayList转换为数据
ArrayList arrayList = SetTools.loadfile(path); string[] str = (string[])arrayList.ToArray(typeof(str ...
- 【人工智能】从零开始学好人工智能,AI知识体系和框架
写在前面: 最近公司的业务方向开始向AI方向改变(人工智能+文娱),但是现阶段AI方面的知识还没有储备,所以作为测试,也开始学习这方面的知识,不掉队. 知识储备: 1.阶段一-高等数学 高 ...
- ajax调用.net API项目跨域问题解决
ajax调用.net API项目,经常提示跨域问题.添加如下节点代码解决:httpProtocol <system.webServer> <handlers> <remo ...
- python远程连接windows
远程连接windows系统 https://blog.51cto.com/ckl893/2145809 import winrm win2008 = winrm.Session('http:/ ...
- SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操 ...
- 给centos 7添加硬盘空间
前言 今天在安装ambari的时候,制作amberi本地yum源的时候出现了一个问题,虚拟机的磁盘空间不足了,后来发现是因为这个节点之前本来只打算作为数据节点使用的,后来所以后来只给它分配了20G的硬 ...
- FireDac 同时连接SQLserver2000时出现 Connection is busy with results for another command
First chance exception at $763FC632. Exception class EMSSQLNativeException with message '[FireDAC][P ...
- 导入大数据量sql时候超时的问题
D:\Visual-NMP-x64\Bin\MySQL\bin这个是你mysql的路径 mysqldump.exe -h服务器信息 -umysql的用户名 -pmysql的密码 数据库名 > 要 ...
- UE4C++定义属性修饰符总结
1.BlueprintAssignable 暴露该属性来在蓝图中进行赋值,用于绑定多播委托 2.BlueprintCallable 用于从蓝图中调用C++原生函数 3.BlueprintReadO ...