Leetcode 刷题笔记1 图论part04

发布于:2025-03-24 ⋅ 阅读:(28) ⋅ 点赞:(0)

leetcode 110 字符串接龙

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

if __name__ == '__main__':
    n = int(input())
    begin_str, end_str = map(str, input().split())
    if begin_str == end_str:
        print(0)
        exit()
    strlist = []
    for _ in range(n):
        strlist.append(input())
    
    visited = [False for _ in range(n)]
    queue = [[begin_str, 1]]
    while queue:
        Str, step = queue.pop(0)
        if judge(Str, end_str):
            print(step + 1)
            exit()
        for i in range(n):
            if visited[i] == False and judge(strlist[i], Str):
                visited[i] = True
                queue.append([strlist[i], step + 1])
    print(0)

leetcode 105 有向图的完全联通

def dfs(grid, key, visited):
    for value in grid[key]:
        if not visited[value]:
            visited[value] = True
            dfs(grid, value, visited)

def main():
    import sys
    input = sys.stdin.read
    data = input().split()
    n = int(data[0])
    m = int(data[1])
    grid = [[] for _ in range(n + 1)]
    index = 2
    for _ in range(m):
        s = int(data[index])
        t = int(data[index + 1])
        grid[s].append(t)
        index += 2
    visited = [False] * (n + 1)
    visited[1] = True
    dfs(grid, 1, visited)
    for i in range(1, n + 1):
        if not visited[i]:
            print(-1)
            return
    print(1)

if __name__ == '__main__':
    main()

leetcode 106 岛屿的周长

def main():
    import sys
    input = sys.stdin.read
    data = input().split()
    n, m = int(data[0]),int(data[1])
    grid = []
    index = 2
    for _ in range(n):
        grid.append([int(data[index + j]) for j in range(m)])
        index += m
    sum_land= 0
    cover = 0
    for i in range(n):
        for j in range(m):
            if grid[i][j] == 1:
                sum_land += 1
                if i - 1 >= 0 and grid[i - 1][j] == 1:
                    cover += 1
                if j - 1 >= 0 and grid[i][j - 1] == 1:
                    cover += 1
    result = sum_land * 4 - cover * 2
    print(result)

if __name__ == '__main__':
    main()