从图的某一点v出发,递归的进行深度遍历算法。从图的某一点v出发,递归的进行广度优先遍历。Dijkstra单源路径最短算法。
时间: 2024-06-10 07:10:27 浏览: 98
用Dijkstra算法求图中单源最短路径
1. 深度优先遍历算法(DFS)
深度优先遍历算法是一种递归的算法,从图的某一点v开始遍历,先访问该点,然后依次访问其邻接点,直到到达最深的节点,再回溯到之前的节点,继续遍历其他邻接点。如果有多个邻接点,按照编号小的邻接点优先访问。
以下是深度优先遍历算法的伪代码:
DFS(Graph G, Vertex v):
visited[v] = true
for each w in G.adj[v]:
if visited[w] == false:
DFS(G, w)
2. 广度优先遍历算法(BFS)
广度优先遍历算法是一种非递归的算法,从图的某一点v开始遍历,先访问该点,然后访问其所有邻接点,再按照访问的顺序遍历邻接点的邻接点,直到遍历完所有节点。
以下是广度优先遍历算法的伪代码:
BFS(Graph G, Vertex v):
visited[v] = true
queue.enqueue(v)
while queue is not empty:
u = queue.dequeue()
for each w in G.adj[u]:
if visited[w] == false:
visited[w] = true
queue.enqueue(w)
3. Dijkstra单源路径最短算法
Dijkstra单源路径最短算法用于求解从一个源点到图中所有其他节点的最短路径。算法的基本思想是:对于每个节点,维护一个距离值,表示从源点到该节点的最短距离,初始化距离值为无穷大,源点的距离值为0;然后依次遍历节点,每次选取距离值最小的节点,更新其邻接点的距离值,直到遍历完所有节点。
以下是Dijkstra单源路径最短算法的伪代码:
Dijkstra(Graph G, Vertex s):
for each v in G:
dist[v] = INFINITY
dist[s] = 0
Q = set of all vertices in G
while Q is not empty:
u = vertex in Q with smallest dist[]
remove u from Q
for each neighbor v of u:
alt = dist[u] + length(u, v)
if alt < dist[v]:
dist[v] = alt
return dist
阅读全文