当前位置: 首页 > wzjs >正文

网站维护费怎么做会计分录太原做网站哪家好

网站维护费怎么做会计分录,太原做网站哪家好,wordpress 修改表前缀,大连网站开发费多少钱假期归来继续刷题,图论第二天,主要是进一步熟悉dfs 和 bfs 的运用。 99. 岛屿数量(dfs) 99. 岛屿数量 ACM模式还是需要练,不过现在输入输出的感觉已经比较熟悉了。首先是要按照输入搭建一个grid,然后有一…

假期归来继续刷题,图论第二天,主要是进一步熟悉dfs 和 bfs 的运用。

99. 岛屿数量(dfs)

99. 岛屿数量

ACM模式还是需要练,不过现在输入输出的感觉已经比较熟悉了。首先是要按照输入搭建一个grid,然后有一个对应的全是False 的 visit。

关于方向就只有上下左右四个,如果可以走斜向,方向就变成八个了。递归的过程其实比较好理解,就是当前x,y逐步相加,如果越界了就continue,然后如果碰到了grid中为1但没有visit的,就变成visit继续向后递归,当四边都没法符合判断条件的话就进行返回,这就是dfs顺着一条路走下去的思想。

然后是主函数中的调用,当碰到第一个符合条件的地块开始,并计数,记得同时将这块变为True,因为dfs函数里直接是从下一个地块开始转换的。然后不停递归,当结束的时候,就继续回到主函数的遍历中,去测下一个符合if grid[i][j] == 1 and not visited[i][j]:条件的地块,当碰到就是第二块岛,记得将数量+1然后继续递归。

简单理解,主函数中,i,j二次遍历,一旦找到一个为1的地块便计数+1,同时dfs开始,当dfs遍历完之后,i,j继续遍历,这时候如果遍历到之前dfs遍历的地块,也会因为visit中为True而不会开始dfs。可以想象成发现一个起点,dfs开始逐步扩散发掘所有连着的地块。

# dfs方法一
direction = [[0, 1], [1, 0], [0, -1], [-1, 0]] def dfs(grid, visited, x, y):for i, j in direction:next_x = x + inext_y = y + jif next_x < 0 or next_x >= len(grid) or next_y < 0 or next_y >= len(grid[0]):continueif not visited[next_x][next_y] and grid[next_x][next_y] == 1:visited[next_x][next_y] = Truedfs(grid, visited, next_x, next_y)if __name__ == '__main__':  n, m = map(int, input().split())grid = []for i in range(n):grid.append(list(map(int, input().split())))visited = [[False] * m for _ in range(n)]res = 0for i in range(n):for j in range(m):# 判断:如果当前节点是陆地,res+1并标记访问该节点,使用深度搜索标记相邻陆地。if grid[i][j] == 1 and not visited[i][j]:res += 1visited[i][j] = Truedfs(grid, visited, i, j)print(res)

dfs的版本二,变化不大,总体方法更符合之前回溯的模板,即参数-终止条件-单层逻辑。

版本一的写法是 :下一个节点是否能合法已经判断完了,传进dfs函数的就是合法节点。

版本二的写法是:不管节点是否合法,上来就dfs,然后在终止条件的地方进行判断,不合法再return。

理论上来讲,版本一的效率更高一些,因为避免了 没有意义的递归调用,在调用dfs之前,就做合法性判断。 但从写法来说,可能版本二 更利于理解一些。(不过其实都差不太多)

direction = [[0, 1], [1, 0], [0, -1], [-1, 0]] def dfs(grid, visited, x, y):# 与版本一的差别,在调用前增加判断终止条件if visited[x][y] or grid[x][y] == 0:returnvisited[x][y] = Truefor i, j in direction:next_x = x + inext_y = y + jif next_x < 0 or next_x >= len(grid) or next_y < 0 or next_y >= len(grid[0]):continuedfs(grid, visited, next_x, next_y)if __name__ == '__main__':# 版本二n, m = map(int, input().split())grid = []for i in range(n):grid.append(list(map(int, input().split())))visited = [[False] * m for _ in range(n)]res = 0for i in range(n):for j in range(m):# 判断:如果当前节点是陆地,res+1并标记访问该节点,使用深度搜索标记相邻陆地。if grid[i][j] == 1 and not visited[i][j]:res += 1dfs(grid, visited, i, j)print(res)

99. 岛屿数量(bfs)

深搜是一条路走到头,广搜则是一圈一圈的扩散,可以类比为二叉树的层序遍历,原本是每个节点有左右两个子节点,现在变成每个地块有上下左右四个地块。

在bfs函数里,记住每开始一次bfs,要重置一次que,然后将当前的地块x,y 加入队列,并在visit中变成True。之后便是弹出,符合条件加入,重复直到队列为空。

之后主函数调用则是一样的思路,类似发现一个起点,然后一圈一圈开始扩散,直到无法扩散,便开始遍历寻找下一个岛屿的起点。

from collections import deque
directions = [[0, 1], [1, 0], [0, -1], [-1, 0]]
def bfs(grid, visited, x, y):que = deque([])que.append([x,y])visited[x][y] = Truewhile que:cur_x, cur_y = que.popleft()for i, j in directions:next_x = cur_x + inext_y = cur_y + jif next_y < 0 or next_x < 0 or next_x >= len(grid) or next_y >= len(grid[0]):continueif not visited[next_x][next_y] and grid[next_x][next_y] == 1: visited[next_x][next_y] = Trueque.append([next_x, next_y])if __name__ == "__main__":n, m = map(int, input().split())grid = []for i in range(n):grid.append(list(map(int, input().split())))visited = [[False] * m for _ in range(n)]res = 0for i in range(n):for j in range(m):if grid[i][j] == 1 and not visited[i][j]:res += 1bfs(grid, visited, i, j)print(res)

http://www.dtcms.com/wzjs/302673.html

相关文章:

  • 湖南省博物馆网站建设google搜索引擎入口2022
  • 微商网站推广怎么做百度助手app下载安装
  • 专业集团门户网站建设方案湘潭关键词优化服务
  • 广州做网站 信科便宜营销咨询公司排名
  • 乐山做网站seo上海培训
  • asp论坛网站源码百度校招
  • 网站导航优化的描述深圳网站制作推广
  • 天河区网站公司seo营销是什么意思
  • 建设规划许可证公示网站58同城推广效果怎么样
  • 展示型网站php草根站长工具
  • 使用wordpress搭建手机网站百度直播推广
  • 做网站必须要数据库么如何线上推广引流
  • 中国建筑人才网是什么网站北京seo公司司
  • 编程网站入口齐三seo顾问
  • 网站建设分为哪三部分网站排名优化制作
  • 桂林住房城乡建设厅网站网站推广软件有哪些
  • 软件介绍网站模板百度竞价推广代理
  • 如何利用国外网站做自媒体搜索引擎培训班
  • 剑网三魁首怎么做网站百度联盟推广
  • 域名抢注网站建设嘉兴seo排名外包
  • 高端网站建设 aspx企业网站优化报告
  • 国外音乐网站设计百度搜索网页版
  • 网站怎么重装wordpress友情链接作用
  • 为什么做这个网站项目百度搜索优化
  • 手机建网站推广宁波网络推广运营公司电话
  • 做英文网站价格软文推广文章案例
  • 深圳网站建设排名app接入广告变现
  • 深圳招聘网站排行seo排名优化价格
  • 网站地图怎么生成网络营销的含义是什么
  • 网站建设需要很强的编程seo人才网