算法学习笔记--广度优先搜索(1)

算法学习笔记–广度优先搜索(1)

解决最短路径问题的步骤

两个步骤
1. 使用图来建立问题模型
2. 使用广度优先搜索解决问题

什么是图?

图用于模拟一组连接。
图由节点组成。直接相连的节点称为邻居

当图是有向图的时候A–>B(A指向B)那么B是A的邻居,A不是B的邻居。

当图是无向图的时候A—B,他们互为邻居。

广度优先算法是什么?可以解决哪些问题?

1)广度优先搜索是一种用于图的查找算法。

2)第一类问题:从节点A出发,有前往节点B的路径吗?
第二类问题:从节点A出发,前往B的哪条路径最短?

可以发现要解决第二类问题,首先要考虑第一类问题的答案是否成立。

如何查找最短路径

一圈一圈向外辐射查找

实现图

可以使用散列表实现,也就是python中的字典。

实现查找

使用队列(deque)
为了避免陷入死循环,所以我们要加入一个判断一个值是否已经被查找过了。可以使用一个列表存储已经被查找过的值。

运行时间

O(V + E)
V: 顶点
E:边数

实现

from collections import deque

graph = {}

def search(name):
    search_queue = deque()
    search_queue += graph[name]
    searched = []
    while search_queue:
        person = search_queue.popleft()
        if not person in searched:
            if person_is_seller(person):
                print person + 'is a mango seller!'
                return Ture
            else:
                search_queue += graph[person]
                searched.append(person)
    return False

def person_is_seller(name):
    pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值