第二十九天算法设计
Graph 类 (图的广度优先搜索)
java
package suanfa;
import java.util.LinkedList;
import java.util.Queue;
public class Graph {
private int vertices; // 图的顶点数
private int[][] adjacencyMatrix; // 邻接矩阵
// 构造函数,初始化图
public Graph(int vertices) {
this.vertices = vertices;
adjacencyMatrix = new int[vertices][vertices]; // 创建邻接矩阵
}
// 向图中添加一条边
public void addEdge(int start, int end) {
if (start >= 0 && start < vertices && end >= 0 && end < vertices) {
adjacencyMatrix[start][end] = 1; // 从start到end有一条边
adjacencyMatrix[end][start] = 1; // 因为是无向图,反向也添加边
} else {
System.out.println("输入的边的端点无效");
}
}
// 广度优先搜索
public void bfs(int start) {
boolean[] visited = new boolean[vertices]; // 记录各个节点是否已访问
Queue<Integer> queue = new LinkedList<>(); // 使用队列来辅助广度优先搜索
visited[start] = true; // 将起始节点标记为已访问
queue.add(start); // 将起始节点加入队列
// 开始广度优先搜索
while (!queue.isEmpty()) {
int vertex = queue.poll(); // 从队列中取出一个节点
System.out.print(vertex + " "); // 打印当前节点
// 访问与当前节点相邻的未访问的节点
for (int i = 0; i < vertices; i++) {
if (adjacencyMatrix[vertex][i] == 1 && !visited[i]) {
visited[i] = true; // 将相邻节点标记为已访问
queue.add(i); // 将相邻节点加入队列
}
}
}
}
// 打印邻接矩阵
public void printGraph() {
System.out.println("图的邻接矩阵:");
for (int i = 0; i < vertices; i++) {
for (int j = 0; j < vertices; j++) {
System.out.print(adjacencyMatrix[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
// 创建一个图,图中有5个顶点
Graph graph = new Graph(5);
// 添加一些边
graph.addEdge(0, 1);
graph.addEdge(0, 4);
graph.addEdge(1, 2);
graph.addEdge(1, 3);
graph.addEdge(3, 4);
// 打印图的邻接矩阵
graph.printGraph();
// 执行广度优先搜索,从顶点0开始
System.out.println("广度优先搜索结果:");
graph.bfs(0);
}
}
录制: untitled2 – Insertion.java
录制文件:https://meeting.tencent.com/crm/KzGGkGE85d
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本