更弱智的算法学习 day53

python 复制代码
def judge(s1,s2):
    count=0
    for i in range(len(s1)):
        if s1[i]!=s2[i]:
            count+=1
    return count==1

# 作用​:判断两个字符串 s1和 s2是否恰好只有一个字符不同。
# ​细节​:遍历两个字符串的每个字符,统计不同字符的数量。如果最终计数为 1,则返回 True,否则返回 False。

if __name__=='__main__':
    n=int(input())
    beginstr,endstr=map(str,input().split())
    if beginstr==endstr:
        print(0)
        exit()
    strlist=[]
    for i in range(n):
        strlist.append(input())
    
    # use bfs
    visit=[False for i in range(n)]
    queue=[[beginstr,1]]
    while queue:
        str,step=queue.pop(0)
        if judge(str,endstr):
            print(step+1)
            exit()
        for i in range(n):
            if visit[i]==False and judge(strlist[i],str):
                visit[i]=True
                queue.append([strlist[i],step+1])

# 初始化​:
# visit数组标记 strlist中的字符串是否已被访问。
# 队列 queue存储待处理的字符串及其当前步数(从 beginstr到该字符串的序列长度)。初始为 [beginstr, 1]。

# ​BFS 循环​:
# 弹出队首元素,得到当前字符串 str和步数 step。
# 如果 str能直接转换到 endstr,则输出 step+1(加上 endstr)并结束。
# 否则,遍历 strlist,找到未访问且与 str相差一个字符的字符串,标记为已访问并入队(步数加 1)。
# ​队列为空​:说明无法转换,输出 0。
    print(0)
python 复制代码
import collections

path = set()  # 纪录 BFS 所经过之节点

def bfs(root, graph):
    global path
    
    que = collections.deque([root])
    while que:
        cur = que.popleft()
        path.add(cur)
        
        for nei in graph[cur]:
            que.append(nei)
        graph[cur] = []
    return
# 使用deque作为队列,从根节点开始
# 每访问一个节点,就将其加入path集合
# 遍历当前节点的所有邻居,加入队列
def main():
    N, K = map(int, input().strip().split())
    graph = collections.defaultdict(list)
    for _ in range(K):
        src, dest = map(int, input().strip().split())
        graph[src].append(dest)
    
    bfs(1, graph)
    if path == {i for i in range(1, N + 1)}:
        return 1
    return -1
        

if __name__ == "__main__":
    print(main())
python 复制代码
n, m = map(int, input().split())
graph = []
for _ in range(n):
    graph.append(list(map(int, input().split())))

perimeter = 0

for i in range(n):
    for j in range(m):
        if graph[i][j] == 1:  # 陆地
            # 检查四个方向
            # 上方
            if i == 0 or graph[i-1][j] == 0:
                perimeter += 1
            # 下方
            if i == n-1 or graph[i+1][j] == 0:
                perimeter += 1
            # 左方
            if j == 0 or graph[i][j-1] == 0:
                perimeter += 1
            # 右方
            if j == m-1 or graph[i][j+1] == 0:
                perimeter += 1

print(perimeter)
相关推荐
WL_Aurora2 分钟前
Python 算法基础篇之链表
python·算法·链表
AI人工智能+电脑小能手4 分钟前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试
曲幽8 分钟前
FastAPI 少有人提的实用技巧:把 Depends 依赖提到路由层,代码少写60%
python·fastapi·web·routes·depends·prefix·apiroute
qiaozhangchi11 分钟前
求解器学习笔记
笔记·python·学习
bzmK1DTbd13 分钟前
SOLID原则在Java中的实践:单一职责与开闭原则
java·开发语言·开闭原则
AI进化营-智能译站16 分钟前
ROS2 C++开发系列07-高效构建机器人决策逻辑,运算符与控制流实战
开发语言·c++·ai·机器人
winner888118 分钟前
C++ 命名空间、虚函数、抽象类、protected 权限全套通俗易懂精讲(附与 Java 对比)
java·开发语言·c++
不会编程的懒洋洋28 分钟前
C# P/Invoke 基础
开发语言·c++·笔记·安全·机器学习·c#·p/invoke
直奔標竿29 分钟前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
时空系36 分钟前
认识Rust——我的第一个程序 Rust中文编程
开发语言·后端·rust