Cara menggunakan Java untuk melaksanakan algoritma Prim
Algoritma Prim ialah algoritma klasik untuk menyelesaikan pepohon rentang minimum dan boleh digunakan untuk menyelesaikan pelbagai masalah pengoptimuman rangkaian. Dalam artikel ini, kami akan memperkenalkan cara untuk melaksanakan algoritma Prim menggunakan bahasa Java dan memberikan contoh kod yang sepadan.
1) Mulakan pokok rentang minimum menjadi kosong, pilih bucu awal v untuk menyertai set pokok rentang minimum.
2) Lakukan langkah berikut dalam gelung sehingga set pokok rentang minimum mengandungi semua bucu:
a) Pilih bucu u dari luar set pokok rentang minimum supaya berat u ke bucu dalam set pokok rentang minimum ialah yang terkecil.
b) Tambahkan bucu u pada set pokok rentang minimum dan rekodkan berat tepi (u, v).
c) Kemas kini berat u kepada bucu di luar set pokok rentang minimum Jika berat bucu lebih kecil, kemas kini berat bucu ke bucu dalam set pokok rentang minimum.
import java.util.Arrays; public class PrimAlgorithm { // 假设使用邻接矩阵表示图 public int prim(int[][] graph) { int numVertex = graph.length; // 图中顶点的个数 int[] lowCost = new int[numVertex]; // 存储顶点到最小生成树集合的最小权值 boolean[] visited = new boolean[numVertex]; // 标记顶点是否已经加入最小生成树集合 int[] parent = new int[numVertex]; // 存储顶点的父节点 Arrays.fill(lowCost, Integer.MAX_VALUE); // 初始化最小权值为无穷大 Arrays.fill(visited, false); // 初始化顶点未访问 // 从顶点0开始构建最小生成树 lowCost[0] = 0; // 顶点0到最小生成树集合的最小权值为0 parent[0] = -1; // 顶点0没有父节点 // 循环直到最小生成树集合包含所有顶点 for (int i = 0; i < numVertex - 1; i++) { // 选择一个顶点u使得u到最小生成树集合中的顶点的权值最小 int u = -1; for (int j = 0; j < numVertex; j++) { if (!visited[j] && (u == -1 || lowCost[j] < lowCost[u])) { u = j; } } visited[u] = true; // 将顶点u加入最小生成树集合 // 更新u到最小生成树集合外的顶点的权值 for (int v = 0; v < numVertex; v++) { if (!visited[v] && graph[u][v] != 0 && graph[u][v] < lowCost[v]) { lowCost[v] = graph[u][v]; parent[v] = u; } } } int totalPrice = 0; for (int i = 1; i < numVertex; i++) { totalPrice += graph[parent[i]][i]; } return totalPrice; } public static void main(String[] args) { int[][] graph = { {0, 2, 0, 6, 0}, {2, 0, 3, 8, 5}, {0, 3, 0, 0, 7}, {6, 8, 0, 0, 9}, {0, 5, 7, 9, 0} }; PrimAlgorithm primAlgorithm = new PrimAlgorithm(); int totalPrice = primAlgorithm.prim(graph); System.out.println("Total weight of minimum spanning tree: " + totalPrice); } }
Dalam kod di atas, kami menggunakan matriks bersebelahan untuk mewakili graf, dan menggunakan algoritma Dijkstra untuk menyelesaikan jumlah berat pokok rentang minimum. Dalam contoh, kami menggunakan graf 5-bucu untuk menunjukkan penggunaan algoritma.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma Prim menggunakan java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!