图中两个点之间的路线

原创 2016年08月29日 09:50:22

题目描述:给出一张有向图,设计一个算法判断两个点 s 与 t 之间是否存在路线。


样例:如下图,




for s = B and t = E, return true

for s = D and t = C, return false


题中的数据结构时有向图,关于有向图的定义其实看下面的代码就很容易明白了:

class DirectedGraphNode:
    def __init__(self, x):
        self.label = x
        self.neighbors = []

也就是说,每个图中的节点所指向的节点在此节点当中有一个列表neigbors负责存储。现在要做的事情是写一个算法判断图中的节点之间是否存在路径,那么可以考虑用广度优先搜索(BFS(breadth-first search))


之前,我已经说过深度优先搜索(详见:点击打开链接),原则是每走到一步就尽可能地“深入”,直到不能再深入为止。那么,其实广度优先搜索于深度优先搜索是相对应的,广度优先搜索的原则是每到一个节点,都尽可能地“延伸”。拿在有向图中搜索为例,扫描到当前节点之后,应该依次先访问这个节点所指向的其他节点,也就是neigbors中存储的节点,再继续访问neigbors中存储节点的neigbors. 话有点绕,看题中的图就容易明白了:一开始访问A,其后访问B, D,再访问C, E. 


显然,依照这个逻辑,可以利用队列先进先出的性质。


代码如下:

# Definition for a Directed graph node
# class DirectedGraphNode:
#     def __init__(self, x):
#         self.label = x
#         self.neighbors = []


class Solution:
    """
    @param graph: A list of Directed graph node
    @param s: the starting Directed graph node
    @param t: the terminal Directed graph node
    @return: a boolean value
    """
    def hasRoute(self, graph, s, t):
        
        # visited表示已经访问了的节点
        visited = [s]
        return self.bfs(graph, s, t, visited)
    
    
    def bfs(self, graph, s, t, visited):
        queue = [s]
        while len(queue) != 0:
            temp = queue.pop(0)
            if temp == t:
                return True
            visited.append(temp)
            for ele in temp.neighbors:
                if ele not in visited:
                    queue.append(ele)
        return False



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【Java】给定有向图,设计一个算法,找出两个结点之间是否存在一条路径

给定有向图,设计一个算法,找出两个结点之间是否存在一条路径 通过图的遍历,比如深度优先或者广度优先搜索等,就能解决这个问题 从结点的其中一个出发,在遍历过程中,检查是否找到另一个结点即可 在遍历...

Networkx常用算法和求最短路径介绍

求最短路径难道很多人没有发现网上很多人给出的函数是对无权图求的么?默认边的权值都为1,其实可以按照给定的权重求,文章后面有介绍 Algorithms https://networkx.readth...

算法-计算无向图中两个节点之间所有的路径

图论--寻找节点间所有路径        最近在论文中,要获得节点间的路由,由此又开始继续去年的算法学习。下面的就关于寻找两个节点之间所有的路径。因为是在获得路径后,再加上权重,所以不能将那些求最短路...

求两个点之间最短路径

  • 2017年06月01日 01:06
  • 3.57MB
  • 下载

根据两个经纬度点调用百度地图应用查询路线 适用android或者ios中及网页浏览(手机网页同样适用)

Intent intent = null; try {// 如果有安装百度地图 就启动百度地图 StringBuffer sbs = new StringBuffer(); sbs.a...

两个结点之间的距离

  • 2017年08月15日 18:11
  • 860B
  • 下载

计算地球上两个点之间的距离

  • 2016年09月08日 18:58
  • 20KB
  • 下载

求无向图中指定两个节点间的所有路径

百度面试题://邻接矩阵的遍历 typedef struct{ int amount; int *vex; int **matrix; }Graph; //打印从i到j的所有回路 void P...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图中两个点之间的路线
举报原因:
原因补充:

(最多只允许输入30个字)