图论之岛屿系列

图论之岛屿系列

形成模板进行学习,加快学习效率

深度优先遍历

# 可以直接改原始grid的采用直接改的方案来完成修改,减少了内存开支
def dfs(self, grid, i, j):if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]) or grid[i][j] == "0": # 过滤条件returngrid[i][j] = "0" # 写变换条件self.dfs(grid, i - 1, j)self.dfs(grid, i + 1, j)self.dfs(grid, i, j - 1)self.dfs(grid, i, j + 1)return# 无法改原始grid,需要visible辅助
def dfs(self, grid, visible, i, j):if (i < 0or j < 0or i >= len(grid)or j >= len(grid[0])or grid[i][j] == "0"or visible[i][j]):returnvisible[i][j] = Trueself.dfs(grid, visible, i - 1, j)self.dfs(grid, visible, i + 1, j)self.dfs(grid, visible, i, j - 1)self.dfs(grid, visible, i, j + 1)return

广度优先遍历

# 原有grid进行处理
def bfs(self, grid, i, j):queue = deque([[i, j]])grid[i][j] = "0"while queue:cur_x, cur_y = queue.pop()if cur_x - 1 >= 0 and grid[cur_x - 1][cur_y] == "1":queue.append([cur_x - 1, cur_y])grid[cur_x - 1][cur_y] = "0"if cur_x + 1 < len(grid) and grid[cur_x + 1][cur_y] == "1":queue.append([cur_x + 1, cur_y])grid[cur_x + 1][cur_y] = "0"if cur_y - 1 >= 0 and grid[cur_x][cur_y - 1] == "1":queue.append([cur_x, cur_y - 1])grid[cur_x][cur_y - 1] = "0"if cur_y + 1 < len(grid[0]) and grid[cur_x][cur_y + 1] == "1":queue.append([cur_x, cur_y + 1])grid[cur_x][cur_y + 1] = "0"return# 提供辅助visible进行处理
def bfs(self, grid, nums, i, j):queue = deque([[i, j]])nums.add((i, j))while queue:cur_x, cur_y = queue.pop()if (cur_x - 1 >= 0and grid[cur_x - 1][cur_y] >= grid[cur_x][cur_y]and (cur_x - 1, cur_y) not in nums):queue.append([cur_x - 1, cur_y])nums.add((cur_x - 1, cur_y))if (cur_x + 1 < len(grid)and grid[cur_x + 1][cur_y] >= grid[cur_x][cur_y]and (cur_x + 1, cur_y) not in nums):queue.append([cur_x + 1, cur_y])nums.add((cur_x + 1, cur_y))if (cur_y - 1 >= 0and grid[cur_x][cur_y - 1] >= grid[cur_x][cur_y]and (cur_x, cur_y - 1) not in nums):queue.append([cur_x, cur_y - 1])nums.add((cur_x, cur_y - 1))if (cur_y + 1 < len(grid[0])and grid[cur_x][cur_y + 1] >= grid[cur_x][cur_y]and (cur_x, cur_y + 1) not in nums):queue.append([cur_x, cur_y + 1])nums.add((cur_x, cur_y + 1))return

实例

岛屿数量题目描述:

给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。

输入描述:

第一行包含两个整数 N, M,表示矩阵的行数和列数。

后续 N 行,每行包含 M 个数字,数字为 1 或者 0。

输出描述:

输出一个整数,表示岛屿的数量。如果不存在岛屿,则输出 0。

输入示例:

4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1输出示例:3

在这里插入图片描述
实现方案
将遍历过的grid设置为0

  1. 深度优先遍历
class Solution:def dfs(self, grid, i, j):if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]) or grid[i][j] == "0":returngrid[i][j] = "0"self.dfs(grid, i - 1, j)self.dfs(grid, i + 1, j)self.dfs(grid, i, j - 1)self.dfs(grid, i, j + 1)returndef numIslands(self, grid: List[List[str]]) -> int:m, n = len(grid), len(grid[0])cnt = 0for i, j in product(range(m), range(n)):if grid[i][j] == "1":self.dfs(grid, i, j)cnt += 1return cnt
  1. 广度优先遍历
class Solution:def bfs(self, grid, i, j):queue = deque([[i, j]])grid[i][j] = "0"while queue:cur_x, cur_y = queue.pop()if cur_x - 1 >= 0 and grid[cur_x - 1][cur_y] == "1":queue.append([cur_x - 1, cur_y])grid[cur_x - 1][cur_y] = "0"if cur_x + 1 < len(grid) and grid[cur_x + 1][cur_y] == "1":queue.append([cur_x + 1, cur_y])grid[cur_x + 1][cur_y] = "0"if cur_y - 1 >= 0 and grid[cur_x][cur_y - 1] == "1":queue.append([cur_x, cur_y - 1])grid[cur_x][cur_y - 1] = "0"if cur_y + 1 < len(grid[0]) and grid[cur_x][cur_y + 1] == "1":queue.append([cur_x, cur_y + 1])grid[cur_x][cur_y + 1] = "0"returndef numIslands(self, grid: List[List[str]]) -> int:m, n = len(grid), len(grid[0])cnt = 0for i, j in product(range(m), range(n)):if grid[i][j] == "1":self.bfs(grid, i, j)cnt += 1return cnt

岛屿的最大面积

题目描述

给定一个由 1(陆地)和 0(水)组成的矩阵,计算岛屿的最大面积。岛屿面积的计算方式为组成岛屿的陆地的总数。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。

输入描述

第一行包含两个整数 N, M,表示矩阵的行数和列数。后续 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。

输出描述

输出一个整数,表示岛屿的最大面积。如果不存在岛屿,则输出 0。

输入示例

4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1输出示例4

提示信息
在这里插入图片描述
样例输入中,岛屿的最大面积为 4。

数据范围:

方案:
与岛屿数量一致,增加一个计数功能即可

  1. 深度优先遍历
class Solution:def dfs(self, grid, i, j):if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]) or grid[i][j] == 0:returnself.cnt += 1grid[i][j] = 0self.dfs(grid, i - 1, j)self.dfs(grid, i + 1, j)self.dfs(grid, i, j - 1)self.dfs(grid, i, j + 1)returndef maxAreaOfIsland(self, grid: List[List[int]]) -> int:maxN = 0m, n = len(grid), len(grid[0])for i, j in product(range(m), range(n)):if grid[i][j] == 1:self.cnt = 0self.dfs(grid, i, j)maxN = max(maxN, self.cnt)return maxN
  1. 广度优先遍历
class Solution:def bfs(self, grid, i, j):queue = deque([[i, j]])grid[i][j] = 0cnt = 1while queue:cur_x, cur_y = queue.pop()if cur_x - 1 >= 0 and grid[cur_x - 1][cur_y] == 1:queue.append([cur_x - 1, cur_y])grid[cur_x - 1][cur_y] = 0cnt += 1if cur_x + 1 < len(grid) and grid[cur_x + 1][cur_y] == 1:queue.append([cur_x + 1, cur_y])grid[cur_x + 1][cur_y] = 0cnt += 1if cur_y - 1 >= 0 and grid[cur_x][cur_y - 1] == 1:queue.append([cur_x, cur_y - 1])grid[cur_x][cur_y - 1] = 0cnt += 1if cur_y + 1 < len(grid[0]) and grid[cur_x][cur_y + 1] == 1:queue.append([cur_x, cur_y + 1])grid[cur_x][cur_y + 1] = 0cnt += 1return cntdef maxAreaOfIsland(self, grid: List[List[int]]) -> int:maxN = 0m, n = len(grid), len(grid[0])for i, j in product(range(m), range(n)):if grid[i][j] == 1:cnt = self.bfs(grid, i, j)maxN = max(maxN, cnt)return maxN

孤岛的总面积

题目描述

给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿。

现在你需要计算所有孤岛的总面积,岛屿面积的计算方式为组成岛屿的陆地的总数。

输入描述

第一行包含两个整数 N, M,表示矩阵的行数和列数。之后 N 行,每行包含 M 个数字,数字为 1 或者 0。

输出描述

输出一个整数,表示所有孤岛的总面积,如果不存在孤岛,则输出 0。

输入示例

4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1

输出示例:

1

提示信息:
在这里插入图片描述
解题思路:
反方向法,求孤岛,只需要把不是孤岛的给变成海即可,剩下的都是孤岛,不是孤岛的需要从上下左右边界进行海化

  1. 深度优先遍历
class Solution:def dfs(self, grid, i, j):if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]) or grid[i][j] == 0:returngrid[i][j] = 0self.dfs(grid, i - 1, j)self.dfs(grid, i + 1, j)self.dfs(grid, i, j - 1)self.dfs(grid, i, j + 1)def SumAreaIsolatedLand(self, grid):m, n = len(grid), len(grid[0])sumN = 0for j in [0, -1]:for i in range(m):if grid[i][j] == 1:self.dfs(grid, i, j)for i in [0, -1]:for j in range(1, n - 1):if grid[i][j] == 1:self.dfs(grid, i, j)for i, j in product(range(1, m - 1), range(1, n - 1)):if grid[i][j] == 1:sumN += 1return sumN
  1. 广度优先遍历
class Solution:def bfs(self, grid, i, j):queue = deque([[i, j]])grid[i][j] = 0while queue:cur_x, cur_y = queue.pop()if cur_x - 1 >= 0 and grid[cur_x - 1][cur_y] == 1:queue.append([cur_x - 1, cur_y])grid[cur_x - 1][cur_y] = 0if cur_x + 1 < len(grid) and grid[cur_x + 1][cur_y] == 1:queue.append([cur_x + 1, cur_y])grid[cur_x + 1][cur_y] = 0if cur_y - 1 >= 0 and grid[cur_x][cur_y - 1] == 1:queue.append([cur_x, cur_y - 1])grid[cur_x][cur_y - 1] = 0if cur_y + 1 < len(grid[0]) and grid[cur_x][cur_y + 1] == 1:queue.append([cur_x, cur_y + 1])grid[cur_x][cur_y + 1] = 0returndef SumAreaIsolatedLand(self, grid):m, n = len(grid), len(grid[0])sumN = 0for j in [0, -1]:for i in range(m):if grid[i][j] == 1:self.bfs(grid, i, j)for i in [0, -1]:for j in range(1, n - 1):if grid[i][j] == 1:self.bfs(grid, i, j)for i, j in product(range(1, m - 1), range(1, n - 1)):if grid[i][j] == 1:sumN += 1return sumN

沉没孤岛

题目描述:

给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿。

现在你需要将所有孤岛“沉没”,即将孤岛中的所有陆地单元格(1)转变为水域单元格(0)。

输入描述:

第一行包含两个整数 N, M,表示矩阵的行数和列数。

之后 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。

输出描述

输出将孤岛“沉没”之后的岛屿矩阵。

输入示例:

4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1

输出示例

1 1 0 0 0
1 1 0 0 0
0 0 0 0 0
0 0 0 1 1

提示信息
在这里插入图片描述
方案:
与孤岛总面不同的是,需要在原有grid上进行操作,不可以直接对grid进行调整,增加visible来控制非孤岛的位置,最后遍历,仍然为1的便是孤岛

  1. 深度优先遍历
class Solution:def dfs(self, grid, visible, i, j):if (i < 0or j < 0or i >= len(grid)or j >= len(grid[0])or grid[i][j] == 0or visible[i][j] is True):returnvisible[i][j] = Trueself.dfs(grid, visible, i - 1, j)self.dfs(grid, visible, i + 1, j)self.dfs(grid, visible, i, j - 1)self.dfs(grid, visible, i, j + 1)returndef DownIsolatedLand(self, grid):m, n = len(grid), len(grid[0])visible = [[False] * n for _ in range(m)]for i in [0, -1]:for j in range(1, n - 1):if grid[i][j] == 1:self.dfs(grid, visible, i, j)for j in [0, -1]:for i in range(1, m - 1):if grid[i][j] == 1:self.dfs(grid, visible, i, j)for i, j in product(range(1, m - 1), range(1, n - 1)):if grid[i][j] == 1 and visible[i][j] is False:grid[i][j] = 0return
  1. 广度优先遍历
class Solution:def bfs(self, grid, visible, i, j):queue = deque([[i, j]])visible[i][j] = Truewhile queue:cur_x, cur_y = queue.pop()if (cur_x - 1 >= 0and grid[cur_x - 1][cur_y] == 1and visible[cur_x - 1][cur_y] is False):queue.append([cur_x - 1, cur_y])visible[cur_x - 1][cur_y] = Trueif (cur_x + 1 < len(grid)and grid[cur_x + 1][cur_y] == 1and visible[cur_x + 1][cur_y] is False):queue.append([cur_x + 1, cur_y])visible[cur_x + 1][cur_y] = Trueif (cur_y - 1 >= 0and grid[cur_x][cur_y - 1] == 1and visible[cur_x][cur_y - 1] is False):queue.append([cur_x, cur_y - 1])visible[cur_x][cur_y - 1] = Trueif (cur_y + 1 < len(grid[0])and grid[cur_x][cur_y + 1] == 1and visible[cur_x][cur_y + 1] is False):queue.append([cur_x, cur_y + 1])visible[cur_x][cur_y + 1] = Truereturndef DownIsolatedLand(self, grid):m, n = len(grid), len(grid[0])visible = [[False] * n for _ in range(m)]for i in [0, -1]:for j in range(1, n - 1):if grid[i][j] == 1:self.bfs(grid, visible, i, j)for j in [0, -1]:for i in range(1, m - 1):if grid[i][j] == 1:self.bfs(grid, visible, i, j)for i, j in product(range(1, m - 1), range(1, n - 1)):if grid[i][j] == 1 and visible[i][j] is False:grid[i][j] = 0return 

水流问题

题目描述:

现有一个 N × M 的矩阵,每个单元格包含一个数值,这个数值代表该位置的相对高度。矩阵的左边界和上边界被认为是第一组边界,而矩阵的右边界和下边界被视为第二组边界。

矩阵模拟了一个地形,当雨水落在上面时,水会根据地形的倾斜向低处流动,但只能从较高或等高的地点流向较低或等高并且相邻(上下左右方向)的地点。我们的目标是确定那些单元格,从这些单元格出发的水可以达到第一组边界和第二组边界。

输入描述:

第一行包含两个整数 N 和 M,分别表示矩阵的行数和列数。

后续 N 行,每行包含 M 个整数,表示矩阵中的每个单元格的高度。

输出描述:

输出共有多行,每行输出两个整数,用一个空格隔开,表示可达第一组边界和第二组边界的单元格的坐标,输出顺序任意。

输入示例:

5 5
1 3 1 2 4
1 2 1 3 2
2 4 7 2 1
4 5 6 1 1
1 4 1 2 1

输出示例:

0 4
1 3
2 2
3 0
3 1
3 2
4 0
4 1

提示信息:

在这里插入图片描述
图中的蓝色方块上的雨水既能流向第一组边界,也能流向第二组边界。所以最终答案为所有蓝色方块的坐标。

解题思路:
从上左边界和右下边界作为始点,水流开始往高处流动,最终取两个方向的交集,说明即可往第一组边界流动,也可以往第二组边界流动

  1. 深度优先遍历
class Solution:def dfs(self, grid, nums, i, j):if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]) or (i, j) in nums:returnnums.add((i, j))if i - 1 >= 0 and grid[i][j] <= grid[i - 1][j]:self.dfs(grid, nums, i - 1, j)if i + 1 < len(grid) and grid[i][j] <= grid[i + 1][j]:self.dfs(grid, nums, i + 1, j)if j - 1 >= 0 and grid[i][j] <= grid[i][j - 1]:self.dfs(grid, nums, i, j - 1)if j + 1 < len(grid[0]) and grid[i][j] <= grid[i][j + 1]:self.dfs(grid, nums, i, j + 1)returndef WaterFlow(self, grid):m, n = len(grid), len(grid[0])num1 = set()num2 = set()for i in range(m):self.dfs(grid, num1, i, 0)self.dfs(grid, num2, i, n - 1)for j in range(n):self.dfs(grid, num1, 0, j)self.dfs(grid, num2, m - 1, j)return list(num1 & num2)
  1. 广度优先遍历
class Solution:def bfs(self, grid, nums, i, j):queue = deque([[i, j]])nums.add((i, j))while queue:cur_x, cur_y = queue.pop()if (cur_x - 1 >= 0and grid[cur_x - 1][cur_y] >= grid[cur_x][cur_y]and (cur_x - 1, cur_y) not in nums):queue.append([cur_x - 1, cur_y])nums.add((cur_x - 1, cur_y))if (cur_x + 1 < len(grid)and grid[cur_x + 1][cur_y] >= grid[cur_x][cur_y]and (cur_x + 1, cur_y) not in nums):queue.append([cur_x + 1, cur_y])nums.add((cur_x + 1, cur_y))if (cur_y - 1 >= 0and grid[cur_x][cur_y - 1] >= grid[cur_x][cur_y]and (cur_x, cur_y - 1) not in nums):queue.append([cur_x, cur_y - 1])nums.add((cur_x, cur_y - 1))if (cur_y + 1 < len(grid[0])and grid[cur_x][cur_y + 1] >= grid[cur_x][cur_y]and (cur_x, cur_y + 1) not in nums):queue.append([cur_x, cur_y + 1])nums.add((cur_x, cur_y + 1))returndef WaterFlow(self, grid):m, n = len(grid), len(grid[0])num1 = set()num2 = set()for i in range(m):self.bfs(grid, num1, i, 0)self.bfs(grid, num2, i, n - 1)for j in range(n):self.bfs(grid, num1, 0, j)self.bfs(grid, num2, m - 1, j)return list(num1 & num2)

建造最大岛屿

题目描述:

给定一个由 1(陆地)和 0(水)组成的矩阵,你最多可以将矩阵中的一格水变为一块陆地,在执行了此操作之后,矩阵中最大的岛屿面积是多少。

岛屿面积的计算方式为组成岛屿的陆地的总数。岛屿是被水包围,并且通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设矩阵外均被水包围。

输入描述:

第一行包含两个整数 N, M,表示矩阵的行数和列数。之后 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。

输出描述:

输出一个整数,表示最大的岛屿面积。如果矩阵中不存在岛屿,则输出 0。

输入示例:

4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1

输出示例

6

提示信息
在这里插入图片描述
对于上面的案例,有两个位置可将 0 变成 1,使得岛屿的面积最大,即 6。

在这里插入图片描述
解决方案:

  1. 分区遍历,将一块岛屿按照新的序号保留下来,同时计算出对应的面积
  2. 遍历grid==0的区域,进行连通,确定最大值

  1. 深度优先遍历:
class Solution:def dfs(self, grid, index, i, j):if (i < 0or j < 0or i >= len(grid)or j >= len(grid[0])or grid[i][j] in [0, index]):returnself.cnt += 1grid[i][j] = indexself.dfs(grid, index, i - 1, j)self.dfs(grid, index, i + 1, j)self.dfs(grid, index, i, j - 1)self.dfs(grid, index, i, j + 1)returndef BuildLand(self, grid):record = {0: 0}m, n = len(grid), len(grid[0])index = 2maxN = 0for i, j in product(range(m), range(n)):if grid[i][j] == 1:self.cnt = 0self.dfs(grid, index, i, j)record[index] = self.cntindex += 1maxN = max(maxN, self.cnt)for i, j in product(range(m), range(n)):if grid[i][j] == 0:sumN = 1if i - 1 >= 0:sumN += record[grid[i - 1][j]]if i + 1 < m:sumN += record[grid[i + 1][j]]if j - 1 >= 0:sumN += record[grid[i][j - 1]]if j + 1 < n:sumN += record[grid[i][j + 1]]maxN = max(maxN, sumN)return maxN
  1. 广度优先遍历
class Solution:def bfs(self, grid, index, i, j):queue = deque([[i, j]])grid[i][j] = indexcnt = 1while queue:cur_x, cur_y = queue.pop()if cur_x - 1 >= 0 and grid[cur_x - 1][cur_y] == 1:queue.append([cur_x - 1, cur_y])grid[cur_x - 1][cur_y] = indexcnt += 1if cur_x + 1 < len(grid) and grid[cur_x + 1][cur_y] == 1:queue.append([cur_x + 1, cur_y])grid[cur_x + 1][cur_y] = indexcnt += 1if cur_y - 1 >= 0 and grid[cur_x][cur_y - 1] == 1:queue.append([cur_x, cur_y - 1])grid[cur_x][cur_y - 1] = indexcnt += 1if cur_y + 1 < len(grid[0]) and grid[cur_x][cur_y + 1] == 1:queue.append([cur_x, cur_y + 1])grid[cur_x][cur_y + 1] = indexcnt += 1return cntdef BuildLand(self, grid):record = {0: 0}m, n = len(grid), len(grid[0])index = 2maxN = 0for i, j in product(range(m), range(n)):if grid[i][j] == 1:cnt = self.bfs(grid, index, i, j)record[index] = cntindex += 1maxN = max(maxN, cnt)for i, j in product(range(m), range(n)):if grid[i][j] == 0:sumN = 1if i - 1 >= 0:sumN += record[grid[i - 1][j]]if i + 1 < m:sumN += record[grid[i + 1][j]]if j - 1 >= 0:sumN += record[grid[i][j - 1]]if j + 1 < n:sumN += record[grid[i][j + 1]]maxN = max(maxN, sumN)return maxN

岛屿的周长

题目描述

给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿是被水包围,并且通过水平方向或垂直方向上相邻的陆地连接而成的。

你可以假设矩阵外均被水包围。在矩阵中恰好拥有一个岛屿,假设组成岛屿的陆地边长都为 1,请计算岛屿的周长。岛屿内部没有水域。

输入描述

第一行包含两个整数 N, M,表示矩阵的行数和列数。之后 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。

输出描述

输出一个整数,表示岛屿的周长。

输入示例

5 5
0 0 0 0 0
0 1 0 1 0
0 1 1 1 0
0 1 1 1 0
0 0 0 0 0

输出示例

14

提示信息

在这里插入图片描述
岛屿的周长为 14。

解决方案:
从左上往右下遍历,如果当前位置为1,那周长会增加4,如果当前位置左/下位置也为1,那将会减少2条边,所以只需要计数即可

from itertools import productclass Solution:def LaneLength(self, grid):m, n = len(grid), len(grid[0])cnt1 = 0cnt2 = 0for i, j in product(range(m), range(n)):if grid[i][j] == 1:cnt1 += 1if i + 1 < m and grid[i + 1][j] == 1:cnt2 += 1if j + 1 < n and grid[i][j + 1] == 1:cnt2 += 1return 4 * cnt1 - 2 * cnt2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传统车牌识别

主要参考&#xff1a;https://blog.csdn.net/qq_40784418/article/details/105586644 其它介绍&#xff1a; https://blog.csdn.net/great_yzl/article/details/120127962 https://blog.csdn.net/onepunch_k/article/details/115480904 cv2.matchTemplate https://docs.ope…

有个网友问Webview2如何另存为mhtml

有个网友问Webview2如何另存为mhtml 。俺查了一下&#xff0c;Webview2没有直接的saveas函数。然后我查到 之后我就使用 webview2 capture 这2个关键字去查询&#xff0c;果然搜到了 一段代码 然后我把这段代码 改成成C#的&#xff0c; string data await webView21.CoreWebV…

学会这几点,轻松制作引人入胜的电子期刊

随着数字化时代的到来&#xff0c;电子期刊已经成为了信息传播的重要载体。它以方便快捷、形式多样、互动性强等特点&#xff0c;受到了广泛的欢迎。那么&#xff0c;如何制作一份引人入胜的电子期刊呢&#xff1f;下面就来为大家分享几点制作电子期刊的小技巧。 1.选择合适的制…

你为什么学习c++?

C 是几乎所有现代面向对象语言的鼻祖&#xff08;注意是现代面向对象语言&#xff0c;还有一个“古代”面向对象&#xff0c;思想是消息传递而不是封装、继承与多态&#xff0c;Objective-C 就是消息传递的面向对象语言&#xff09;。刚好我有一些资料&#xff0c;是我根据网友…

vue2动态横条图(横条图样式定时切换)

每次切换成新图后会清除定时器和图&#xff08;重新加载&#xff0c;否则要么会重复加载定时器。清除定时器之后要先调用一次index为0的数据&#xff09; 数据样例 acrossBarDatas:{data: ["80", "80"],sunffix: [单位, "单位"],title: "标…

提取人脸——OpenCV

提取人脸 导入所需的库创建窗口显示原始图片显示检测到的人脸创建全局变量定义字体对象定义一个函数select_image定义了extract_faces函数设置按钮运行GUI主循环运行显示 导入所需的库 tkinter&#xff1a;用于创建图形用户界面。 filedialog&#xff1a;用于打开文件对话框。 …

链表OJ--超详细解析

链表OJ 文章目录 链表OJ1. 反转链表2. 返回K值3. 链表的中间节点4. 回文链表5. 相交链表6. 带环链表6.1 为什么一定会相遇&#xff0c;有没有可能会错过&#xff0c;或者出现永远追不上的情况&#xff0c;请证明6.2 slow一次走一步&#xff0c;fast如果一次走3步&#xff0c;走…

Jmeter如何进行分布式测试

使用Jmeter进行性能测试时&#xff0c;有些同学问我如果并发数比较大(比如最近项目需要支持1000并发)&#xff0c;单台电脑的配置(CPU和内存)可能无法支持&#xff0c;怎么办就需要使用分布式压测 1.分布式原理&#xff1a; 1、Jmeter分布式测试时&#xff0c;选择其中一台作…

Selenium IED-控制已打开的Chrome浏览器

本文已收录于专栏 《自动化测试》 目录 背景介绍优势特点操作步骤总结提升 背景介绍 在我们进行自动化测试的过程中有时候会遇见一个很棘手的问题那就是登录的过程中需要图片验证码&#xff0c;图片验证码设计的初衷其实就是为了防自动化&#xff0c;防止一些人利用自动工具恶意…

缓冲区设置

缓冲区设计 一、简介 在网络通讯中&#xff0c;用户态缓冲区和内核态缓冲区的大小设定对于优化网络性能和确保数据传输可靠性至关重要。下图是网路通讯的内核缓冲区使用情况&#xff1a; 数据的读写都需要进行系统调用&#xff0c;从用户态切换到内核态去接收数据&#xff0…

昂科烧录器支持TI德州仪器的超低功耗微控制器MSP430F2013IRSAR

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中TI德州仪器的超低功耗微控制器MSP430F2013IRSAR已经被昂科的通用烧录平台AP8000所支持。 MSP430F2013IRSAR超低功耗微控制器由多种设备组成&#xff0c;这些设备具有针对各种应…

集体爆雷!突发中科院2区(Top) 被标记!新增10本期刊被“On Hold“

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.5-1.0&#xff08;录用…

Nginx缓存之web缓存配置

Web 缓存可节约网络带宽&#xff0c;有效提高用户打开网站的速度。由于应用服务器被请求次数的降低&#xff0c;也相对使它的稳定性得到了提升。Web 缓存从数据内容传输的方向分为前向位置缓存和反向位置缓存两类。如下图所示。 前向位置缓存既可以是用户的客户端浏览器&#x…

处理耗时任务

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 处理耗时任务 {public partial class Form1 : Form{public Form1(){InitializeComponent();}bool IsRun false;private string path Directory.GetCurrentDirectory() "\\古诗词.txt";private…

Vite+Vue3安装且自动按需引入Element Plus组件库

一&#xff0c;安装Element Plus npm install element-plus //node环境16二&#xff0c;安装插件 npm install unplugin-auto-import unplugin-vue-components -D三&#xff0c;配置vite.config.ts文件 //按需引入element-plus组件 import AutoImport from unplugin-auto-i…

Oracle基本语法

前言&#xff1a; 1.使用的数据库不同&#xff0c;所使用的语法也略有不同 2.SQL对大小写不敏感&#xff0c;无论大小写&#xff0c;sql自动转换为大写 3.用户名、表名、表空间名、文件路径......等需要用单引号将其包含 4.一般引号里面的内容需要大写 准备工作&#xff1a; &a…

0618_QT4

练习&#xff1a; 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和…

性能工具之 JMeter 常用组件介绍(八)

文章目录 一、Jmeter命令行启动二、Jmeter脚本录制 一、Jmeter命令行启动 Jmeter有两种运行&#xff1a; 一种是采用的界面模式(GUI&#xff09;启动&#xff0c;会占用不少系统资源&#xff1b;另一种是命令行模式&#xff08;non-GUI&#xff09;执行&#xff0c;这样节约资…

《SelectDB 新一代日志存储分析平台解决方案》白皮书重磅发布|立即下载

随着信息技术的飞速进步&#xff0c;企业面临着前所未有的系统复杂性和数据挑战。在此背景下&#xff0c;日志数据成为了企业洞察系统内部状态、监控网络安全以及分析业务动态的宝贵资源&#xff0c;构建高效的日志存储与分析平台至关重要。 作为基于 Apache Doris 打造的现代…

使用 AST语法树分析与修改Javascript 代码

1、AST语法树简介 当编写代码分析工具、代码美化工具、网站逆向分析等场景时&#xff0c;通常需要使用AST语法树技术。 比如项目开发过程中常遇到的场景&#xff1a;某个公共函数名需要更改&#xff0c;但被很多文件多处代码调用&#xff0c;手工修改非常容易漏改、改错等&…