试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在 由顶点 vi 到顶点 vj 的路径(i≠j)。试基于图的广度优先搜索策略写一算法
时间: 2024-02-21 16:58:14 浏览: 96
好的,我会根据您的要求进行回答。首先是基于图的深度优先搜索策略的算法:
```python
# 定义一个图类
class Graph:
def __init__(self, vertices):
self.vertices = vertices
self.adjacency_list = [[] for _ in range(vertices)]
self.visited = [False] * vertices
def add_edge(self, u, v):
self.adjacency_list[u].append(v)
def dfs(self, start, end):
# 将起始节点标记为已访问
self.visited[start] = True
# 遍历起始节点的邻居节点
for i in self.adjacency_list[start]:
# 如果邻居节点没有被访问,则继续递归访问
if not self.visited[i]:
self.dfs(i, end)
# 如果终止节点被访问到了,说明存在路径
if self.visited[end]:
return True
# 如果终止节点没有被访问到,说明不存在路径
return False
```
然后是基于图的广度优先搜索策略的算法:
```python
# 定义一个图类
class Graph:
def __init__(self, vertices):
self.vertices = vertices
self.adjacency_list = [[] for _ in range(vertices)]
def add_edge(self, u, v):
self.adjacency_list[u].append(v)
def bfs(self, start, end):
# 创建一个队列,并将起始节点加入队列中
queue = [start]
# 创建一个 visited 列表,用于记录哪些节点已被访问
visited = [False] * self.vertices
visited[start] = True
while queue:
# 从队列中取出一个节点
node = queue.pop(0)
# 遍历该节点的邻居节点
for i in self.adjacency_list[node]:
# 如果邻居节点没有被访问,则将邻居节点加入队列中,并将其标记为已访问
if not visited[i]:
queue.append(i)
visited[i] = True
# 如果找到了终止节点,说明存在路径
if i == end:
return True
# 如果遍历完整个图都没有找到终止节点,说明不存在路径
return False
```
希望这些代码能够帮助到您!
阅读全文