更弱智的算法学习 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)
相关推荐
lili-felicity18 小时前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
数据知道18 小时前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
island131418 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
曹牧18 小时前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言
浅念-18 小时前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
WeiXiao_Hyy18 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
ZH154558913118 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同76518 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子18 小时前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
Max_uuc18 小时前
【C++ 硬核】打破嵌入式 STL 禁忌:利用 std::pmr 在“栈”上运行 std::vector
开发语言·jvm·c++