请使用 python 编写冒泡排序和图的 Floyd 算法,并进行用例测试
时间: 2024-11-09 20:24:38 浏览: 28
当然,下面我将为你展示如何用 Python 编写冒泡排序算法以及Floyd算法(通常用于寻找最短路径)。这里我们假设你想用Floyd-Warshall算法,这是在一个有向图中找到所有顶点对之间最短路径的动态规划算法。
**1. 冒泡排序算法:**
```python
def bubble_sort(arr):
n = len(arr)
# 遍历所有数组元素
for i in range(n):
# Last i elements are already in place
for j in range(0, n-i-1):
# 如果当前元素大于下一个元素,则交换它们
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
# 测试用例
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = bubble_sort(arr)
print("Sorted array is:", sorted_arr)
```
**2. Floyd-Warshall算法(适用于邻接矩阵表示的图):**
```python
def floyd_warshall(graph):
V = len(graph)
dist = [[float('inf')] * V for _ in range(V)] # 初始化距离矩阵
for i in range(V): # 将起始节点的距离设为0
dist[i][i] = 0
for k in range(V): # 遍历所有的中间节点
for i in range(V):
for j in range(V):
if dist[i][k] != float('inf') and dist[k][j] != float('inf'):
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
return dist
# 示例图
graph = [
[0, 4, float('inf'), 2],
[4, 0, 8, float('inf')],
[float('inf'), 8, 0, 11],
[2, float('inf'), 11, 0]
]
dist_matrix = floyd_warshall(graph)
for i in range(len(dist_matrix)):
print(f"Shortest path from node {i} to all other nodes: {dist_matrix[i]}")
```
在这个例子中,`graph`是一个二维列表,其中`graph[i][j]`表示从节点 `i` 到节点 `j` 的权重。`floyd_warshall()` 函数会返回一个同样大小的矩阵,其中`dist_matrix[i][j]`表示从节点 `i` 到节点 `j` 的最短路径长度。
注意:对于Floyd-Warshall算法的实际应用,你需要确保给定的图是加权无向图,且所有边的权重都是非负的。如果图中有负权重边,那么算法可能无法给出正确的结果。
阅读全文