用Java代码编写一个程序,找朋友的朋友最短路径并附上代码运行截图
时间: 2024-11-06 14:20:05 浏览: 13
在Java中,我们可以使用图算法如Dijkstra算法或BFS (广度优先搜索) 来找到两个顶点之间的最短路径。这里我将演示如何使用邻接矩阵表示图,并使用BFS算法来求解最短路径。首先,假设我们有一个无向图,其中的每个节点都有一个朋友列表。
```java
import java.util.*;
class Graph {
int vertices;
int[][] graph;
// 构造函数
public Graph(int v) {
vertices = v;
graph = new int[v][v];
}
// 添加边到图
void addEdge(int u, int v, int weight) {
graph[u][v] = weight;
graph[v][u] = weight; // 对于无向图,添加双向边
}
// 使用BFS查找最短路径
void bfs(int src) {
boolean[] visited = new boolean[vertices];
int[] distance = new int[vertices]; // 初始化距离数组为无穷大
Arrays.fill(distance, Integer.MAX_VALUE);
distance[src] = 0; // 设置起点的距离为0
Queue<Integer> queue = new LinkedList<>();
queue.add(src);
while (!queue.isEmpty()) {
int u = queue.poll();
visited[u] = true;
for (int v = 0; v < vertices; v++) {
if (graph[u][v] != 0 && !visited[v]) {
distance[v] = Math.min(distance[v], distance[u] + graph[u][v]);
queue.add(v);
}
}
}
printSolution(distance);
}
private void printSolution(int[] distance) {
System.out.println("Vertex\tShortest Distance");
for (int i = 0; i < vertices; i++)
System.out.println(i + "\t" + distance[i]);
}
}
public class Main {
public static void main(String[] args) {
Graph g = new Graph(5); // 假设有5个节点
// 添加边及其权重
g.addEdge(0, 1, 1);
g.addEdge(0, 4, 4);
g.addEdge(1, 2, 2);
g.addEdge(1, 3, 3);
g.addEdge(1, 4, 2);
g.addEdge(2, 3, 1);
g.addEdge(3, 4, 1);
// 求源节点0到其他所有节点的最短路径
g.bfs(0);
}
}
```
请注意,这个示例代码并未提供实际的代码运行截图,因为文本形式无法显示图片。你可以直接复制这段代码到Java环境中运行,它会输出从节点0开始的所有节点到其他节点的最短路径距离。
阅读全文