Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan algoritma Prim menggunakan java

Bagaimana untuk melaksanakan algoritma Prim menggunakan java

王林
王林asal
2023-09-20 09:06:25748semak imbas

Bagaimana untuk melaksanakan algoritma Prim menggunakan java

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. Idea algoritma
    Idea asas algoritma Prim adalah bermula dari puncak awal dan berkembang secara beransur-ansur untuk menjana pokok rentang minimum. Langkah-langkah khusus adalah seperti berikut:

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.

  1. Pelaksanaan kod Java
    Berikut ialah contoh kod menggunakan bahasa Java untuk melaksanakan algoritma Prim:
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.

  1. Ringkasan
    Melalui pengenalan artikel ini, kami memahami idea asas algoritma Prim dan cara melaksanakan algoritma menggunakan bahasa Java. Saya harap artikel ini dapat membantu pembaca lebih memahami algoritma Prim dan dapat menggunakannya secara fleksibel dalam aplikasi praktikal.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma Prim menggunakan java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn