代码随想录算法训练营第五十八天| 图论4—卡码网110. 字符串接龙,105. 有向图的完全联通

图论第四天,感觉图论+ACM每道题做的都挺麻烦的,需要花很多时间,题目花样还是挺多的,需要思考每道题怎么去搜索,如果知道思路之后做起来还是比较轻松的。

110. 字符串接龙

110. 字符串接龙

思路新颖,题目简单的一道题,因为每次只能变一个字符,所以judge函数就是查找只有一个字符不同的两个字符串,组成可以行走的路径。然后才是利用bfs进行遍历,每走一步,将当前的字符在visited中的表示转为True,以免走回头路。所以就是为什么bfs的判断条件是if visiti==False and judge(strlisti,str):只有没走过+只差1的才可以走,然后将当前字符串以及该字符串所走的步数进行记录,有点像之前的二叉树高度计算,以后序遍历初步的将每个节点的高度往上进行传递,这个也是将每个字符串的步骤进行传递。当当前的str和endstr相等的时候,结束递归并输出当前的步数,如果没有的话则输出0。

python 复制代码
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())
    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])
    print(0)

105. 有向图的完全联通

105. 有向图的完全联通

题目确实是多种多样的,但是BFS的思路变化都挺小,主要思路还是创捷队列,然后进行弹出,将弹出的元素进行操作,比如这道题中就是加入到path中。 BFS 从节点1开始遍历图,通过维护que 扩展节点,将所有能到达的节点加入。最后判断是否包含了1到n的所有节点。如果相等,说明图是连通的,从起点能访问所有节点。

python 复制代码
import collections

path = set() 

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

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())
相关推荐
裕晟资质规划8 小时前
武器装备科研生产单位保密资质申请方法论:条件模型与流程拆解
人工智能·算法
en.en..9 小时前
C语言 标准输入 / 输出缓冲区
算法
吃好睡好便好11 小时前
查找函数的使用
学习·算法·matlab·生活·查找函数
学习星球11 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
靠沿12 小时前
贪心算法专题(二)
算法·贪心算法
猎头南楼13 小时前
具身智能模型部署方向的能力要求与技术栈梳理
人工智能·深度学习·算法
啥都想学点的研究生14 小时前
一篇文章讲清楚:线性回归问题的求解——正规方程法
算法·机器学习·线性回归
青少儿编程课堂14 小时前
树状数组精讲:逆序对计数与离散化(附双语言解法)
算法·树状数组·离散化·信息学奥赛·逆序对
血小板要健康14 小时前
网格 dfs 与 FloodFill:从岛屿、区域到搜索路径
笔记·算法·leetcode·深度优先
VALENIAN瓦伦尼安教学设备15 小时前
设备状态检测振动分析实训台案例分析
大数据·数据库·人工智能·嵌入式硬件·算法