设置一个vip隐私,夹杂一些碎碎念......涉及到一些转自其他佬的题解
🚩flag为留存,等技术强硬再钻一把......
本章记录包含DFS、BFS所有相关
2024.4.1
**DFS**
74.分糖果
没整出来,糖果种类没处理好 分糖果
cnt = 0
def dfs(depth,n,m):
global cnt
if depth == 7:
if n == 0 and m == 0:
cnt += 1
return
for i in range(n+1):
for j in range(m+1):
if 2 <= i+j <= 5 and i <= n and j <= m:
dfs(depth+1,n-i,m-j)
dfs(0,9,16)
print(cnt)
75.全排列问题
理论上的第一道dfs练习,ac0,下为题解,即dfs一般格式 P1706全排列问题 - 洛谷
n = int(input())
via = [0] * (n+1)
a = [0] * (n+1)
b = [0] * (n+1)
def dfs(step):
if step == n+1:
for i in range(1,n+1):
print("%5d" %b[i],end='')
print()
return
for i in range(1,n+1):
if via[i] == 0:
b[step] = a[i]
via[i] = 1
dfs(step+1)
via[i] = 0
for i in range(1,n+1):
a[i] = i
dfs(1)
输出部分排列
若想对输出部分排列,即n=4,m=3(打印n个数中任意m个数的排列方式),代码修改如下。主要修改在第7、8行n+1m+1
n = 4
m = 3
via = [0] * (n+1)
a = [0] * (n+1)
b = [0] * (n+1)
def dfs(step):
if step == m+1:
for i in range(1,m+1):
print("%5d" %b[i],end='')
print()
return
for i in range(1,n+1):
if via[i] == 0:
b[step] = a[i]
via[i] = 1
dfs(step+1)
via[i] = 0
for i in range(1,n+1):
a[i] = i
dfs(1)
DFS组合相关
学习跳转🔗 <蓝桥杯软件赛>零基础备赛20周--第12周--DFS基础(必考)-CSDN博客
76.最大连通
没整出来,不知道四个方位如何整。题解代码好像和数据格式不匹配,不知道为啥,但最终由于填空题,结果ok了 最大连通
import os
import sys
# 请在此输入您的代码
dx = [-1,0,1,0] #表示四个方位
dy = [0,1,0,-1]
n,m = 30,60
def dfs(x,y):
if g[x][y] == '0':
return 0
g[x][y] = '0'
cnt = 1
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= n or ny >= m:
continue
cnt += dfs(nx,ny)
return cnt
g = list()
for i in range(30):
a = input() #为适应题目提供数据
g.append(list(input().strip()))
ans = 0
for i in range(n):
for j in range(m):
if g[i][j] == '1':
ans = max(ans,dfs(i,j))
print(ans)
2024.4.2
77.全球变暖
//没做出来,还有点题目没了解明白。题目求问的是沉没岛屿数,上下左右both#称为岛屿。不过神奇的是这个正确题解在遇到海洋外both#也会判定为岛屿(其实不是)全球变暖
第二行sys.setrecursionlimit()设置递归深度,否则ac75%
import sys
sys.setrecursionlimit(60000)
def dfs(x,y):
dx = [0,0,1,-1]
dy = [1,-1,0,0]
global flag,vis,mp
vis[x][y] = 1
if mp[x][y+1] == '#' and mp[x][y-1] == '#' and mp[x-1][y] == '#' and mp[x+1][y] == '#':
flag = 1
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if vis[nx][ny] == 0 and mp[nx][ny] == '#':
dfs(nx,ny)
n = int(input())
mp = []
for i in range(n):
mp.append(list(input()))
vis = []
for i in range(n):
vis.append([0] * n)
ans = 0
for i in range(n):
for j in range(n):
if mp[i][j] == '#' and vis[i][j] == 0:
flag = 0
dfs(i,j)
if flag == 0:
ans += 1
print(ans)
78.与或异或
没做出来,gpt也是 与或异或