图及算法----遍历算法(迭代实现)

        一直以来,对关于算法怎么一步步的说教不感冒,嗯,这次知道这个问题怎么做怎么做,确实解决了这个问题!但是跟多问题来了,这世界上形形色色的算法太多,

有的算法流程还超长,还有就是脑子不够用啊,哪里能记住这么多细节啊,就算记住了也不可能长久啊,就算要记也只能记住些典型(划算点)。怎么办爱情甜又酸(vae)?

  不啰嗦了,这次关照的是图遍历(搜索),模型的假设:

1. 图是一张网,而你是一只爬虫,爬虫想把每个节点检查一下是否牢固;

2. 作为Actor爬虫,是有状态的对象,每次处于不同的环境需要更新状态;

3. 每次更新状态的方式是类似的。

  结合本人经验:一个迭代算法通常要考虑-->

a. 有哪些状态,背景与环境 需要维护;

b. 如何初始化相关量;

c. 状态如何更新;

d. 状态何时更新。

迭代的循环性质,似乎从哪个切点进入或初始化都可以?

没错,这与差分方程与微分方程有点像,初始状态很重要

class Graph: 
    def __init__(self): 
        self.graph: Dict[str, List[str]] = defaultdict(list)
    
    def addEdge(self, u, v): 
        self.graph[u].append(v)
        
def dfs_traverse(graph, start):
    visited, stack = set(), [start]
    while stack:
        node = stack.pop()
        if node not in visited:
            visited.add(node)
            for nextNode in graph[node]:
                if nextNode not in visited:
                    stack.append(nextNode)
    return visited


def bfs_traverse(graph, start):
    visited, queue = set(), [start]
    while queue:
        node = queue.pop(0)   # 访问的操作包括将该节点纳入被访问集合,并将其子节点纳入待访问队列
        if node not in visited:
            visited.add(node)
            for nextNode in graph[node]:
                if nextNode not in visited:
                    queue.append(nextNode)
    return visited

# 想象有个Actor在结构上行走,它必须维护它的状态的变更,这是搜索的本质

def BFS(graph, s): 
    visited = set()
    queue = [] 
    queue.append(s)  # 维护已经被访问的节点,并以此来访问其子节点
    while queue: 
        s = queue.pop(0) 
        print(s, end=" ") 
        for i in graph[s]: 
            if i not in visited: 
                visited.add(i)
                queue.append(i) 
    return visited

def BFS2(graph, s): 
    visited = set()
    queue = [] 
    while True:
        print(s, end=" ") 
        for i in graph[s]: 
            if i not in visited: 
                visited.add(i)
                queue.append(i)
        if queue:
            s = queue.pop(0) 
        else:
            break
        
        print(queue)
    return visited
原文地址:https://www.cnblogs.com/wdmx/p/10076336.html