Rumah >Java >javaTutorial >Bagaimana untuk melaksanakan algoritma carian pertama luas menggunakan java

Bagaimana untuk melaksanakan algoritma carian pertama luas menggunakan java

WBOY
WBOYasal
2023-09-19 18:04:44775semak imbas

Bagaimana untuk melaksanakan algoritma carian pertama luas menggunakan java

Cara menggunakan Java untuk melaksanakan algoritma carian luas-dahulu

Algoritma carian luas-dahulu (Breadth-First Search, BFS) biasa digunakan dalam teori graf Algoritma carian yang mencari laluan terpendek antara dua nod dalam graf. BFS digunakan secara meluas dalam banyak aplikasi, seperti mencari laluan terpendek dalam mez, perangkak web, dsb.

Artikel ini akan memperkenalkan cara menggunakan bahasa Java untuk melaksanakan algoritma BFS, dan melampirkan contoh kod tertentu.

Pertama, kita perlu mentakrifkan kelas untuk menyimpan nod graf Kelas ini mengandungi nilai nod dan hubungannya dengan nod lain. Kod sampel adalah seperti berikut:

class Node {
    int value;
    boolean visited;
    List<Node> neighbors;

    public Node(int value) {
        this.value = value;
        this.visited = false;
        this.neighbors = new ArrayList<>();
    }

    public void addNeighbor(Node neighbor) {
        neighbors.add(neighbor);
    }
}

Seterusnya, kami mentakrifkan fungsi untuk melaksanakan algoritma BFS. Fungsi ini menerima nod permulaan dan nod sasaran sebagai parameter dan mengembalikan laluan terpendek dari nod mula ke nod sasaran. Kod sampel adalah seperti berikut:

public List<Node> bfs(Node start, Node target) {
    Queue<Node> queue = new LinkedList<>();
    queue.add(start);

    while (!queue.isEmpty()) {
        Node current = queue.remove();
        current.visited = true;

        if (current == target) {
            // 找到目标节点,构建最短路径并返回
            return buildPath(target);
        }

        for (Node neighbor : current.neighbors) {
            if (!neighbor.visited) {
                queue.add(neighbor);
                neighbor.visited = true;
            }
        }
    }

    // 未找到目标节点,返回空列表
    return new ArrayList<>();
}

private List<Node> buildPath(Node target) {
    List<Node> path = new ArrayList<>();
    Node current = target;

    while (current != null) {
        path.add(0, current);
        current = current.previous;
    }

    return path;
}

Dalam kod di atas, kami menggunakan baris gilir untuk memproses setiap nod secara bergilir-gilir. Mula-mula tambahkan nod permulaan pada baris gilir dan kemudian masukkan gelung. Pada setiap lelaran gelung, kami mengambil nod pertama dalam baris gilir dan menetapkannya kepada keadaan yang dilawati. Kemudian semak jika nod adalah nod sasaran, jika ya, bina laluan dan kembali. Jika tidak, semua nod jiran nod akan dilalui dan nod jiran yang tidak dilawati ditambahkan pada baris gilir. Gelung berterusan sehingga baris gilir kosong.

Akhir sekali, kami memanggil penuding buildPath函数来构建最短路径。buildPath函数从目标节点开始,沿着节点的previous untuk menjejak ke hadapan dan menambah setiap nod pada laluan. Akhirnya, laluan yang dibina dikembalikan.

Contoh penggunaan adalah seperti berikut:

Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);

node1.addNeighbor(node2);
node1.addNeighbor(node3);
node2.addNeighbor(node4);
node3.addNeighbor(node4);
node4.addNeighbor(node5);

List<Node> shortestPath = bfs(node1, node5);

// 输出最短路径
for (Node node : shortestPath) {
    System.out.print(node.value + " -> ");
}

Kod di atas membina graf terarah mudah dan menggunakan algoritma BFS untuk mencari laluan terpendek dari nod 1 hingga nod 5. Akhir sekali, keluarkan laluan terpendek ke konsol.

Melalui contoh di atas, kami mempelajari cara menggunakan bahasa Java untuk melaksanakan algoritma carian luas pertama dan menyediakan contoh kod khusus. Saya harap artikel ini dapat membantu anda memahami proses pelaksanaan algoritma BFS.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma carian pertama luas 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