更弱智的算法学习 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)
相关推荐
IP老炮不瞎唠15 小时前
为什么Python爬虫需要代理 IP?原理与应用详解
爬虫·python·tcp/ip
趙卋傑15 小时前
测试开发场景下常见的 MCP 服务
开发语言·python·测试工具·ai编程
@atweiwei15 小时前
langchainrust:Rust 版 LangChain 框架(LLM+Agent+RAG)
开发语言·rust·langchain·agent·向量数据库·rag
阿里嘎多学长15 小时前
2026-04-11 GitHub 热点项目精选
开发语言·程序员·github·代码托管
yugi98783815 小时前
基于最大信息熵的粒子群优化算法图像分割(MATLAB实现)
开发语言·算法·matlab
yaoxin52112315 小时前
376. Java IO API - 使用 Globbing 和自定义 Filter 过滤目录内容
java·开发语言·python
lifallen15 小时前
Flink Agents:Python 执行链路与跨语言 Actor (PyFlink Agent)
java·大数据·人工智能·python·语言模型·flink
飞翔的SA15 小时前
全程 Python:无需离开 Python 即可实现光速级 CUDA 加速,无需c++支持
开发语言·c++·python·nvidia·cuda
冰暮流星15 小时前
javascript之dom访问css
开发语言·javascript·css
北风toto15 小时前
java进制转换方法
java·开发语言·python