更弱智的算法学习 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)
相关推荐
电商API_18007905247几秒前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
zzzll11112 分钟前
深度剖析:HashMap 并发死循环与 ConcurrentHashMap 两代演进全解
java·开发语言
如意猴4 分钟前
【C++】001--C++入门(1)
开发语言·c++
传奇开心果编程27 分钟前
【Rust入门知识点学与练】第10课:Option 和 Result(错误处理入门)
开发语言·学习·rust
2601_9622959939 分钟前
嵌入式开发语言用哪个最好,C,python或者其他
c语言·python·嵌入式开发·开发效率·系统资源
leonkay42 分钟前
C# 锁机制——【2】深入原理
开发语言·后端·spring·c#·个人开发
菜鸡66661 小时前
绕过cf验证,部署 FlareSolverr 服务使用request处理
python·cloudflare
坐吃山猪1 小时前
【多线程】CompletableFuture使用
java·开发语言·多线程
CHPCWWHSU1 小时前
DeepSeek-Harness-Qt将浏览器端Agent装入桌面应用
开发语言·qt
前端 贾公子1 小时前
第10章:RAG(2)
开发语言·python