题目描述
对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。
给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。
思路
有向图的遍历问题,可以使用深度优先搜索或者广度优先搜索
# -*- coding:utf-8 -*-
# class UndirectedGraphNode:
# def __init__(self, x):
# self.label = x
# self.neighbors = []
class Path:
def checkPath(self, a, b):
# write code here
if a == b:
return True
s = []
return self.bfs(a,b,s) or self.bfs(b,a,s)
def dfs(self, a, b, s):
# 深度优先
for i in a.neighbors:
if i == b:
return True
if i not in s:
s.append(i)
return self.dfs(i,b,s)
return False
def bfs(self, a, b, s):
# 广度优先
stack = []
stack.append(a)
while stack:
node = stack.pop()
for i in node.neighbors:
if i == b:
return True
if i not in s:
stack.append(i)
s.append(i)
return False