Rumah pembangunan bahagian belakang Tutorial Python Bagaimana untuk melaksanakan algoritma carian pertama luas menggunakan Python?

Bagaimana untuk melaksanakan algoritma carian pertama luas menggunakan Python?

Sep 19, 2023 am 08:51 AM
python algoritma keluasan pencarian pertama

Bagaimana untuk melaksanakan algoritma carian pertama luas menggunakan Python?

Bagaimana untuk melaksanakan algoritma carian pertama luas menggunakan Python?

Breadth-First Search (BFS) ialah algoritma carian graf asas yang digunakan untuk mencari laluan terpendek ke nod (atau keadaan) tertentu dalam graf atau pokok. Ia boleh digunakan secara meluas dalam banyak bidang, seperti mencari rantai perhubungan rakan terpendek dalam rangkaian sosial, menyelesaikan masalah labirin, dsb. Python menyediakan struktur data dan pustaka fungsi yang berkuasa, menjadikan pelaksanaan BFS tugas yang agak mudah. Artikel ini akan memperkenalkan cara menggunakan Python untuk melaksanakan algoritma BFS dan memberikan contoh kod khusus.

Pertama, kita perlu mentakrifkan struktur data graf. Graf boleh diwakili menggunakan senarai bersebelahan atau matriks bersebelahan. Dalam artikel ini, kami akan mewakili graf menggunakan senarai bersebelahan. Berikut ialah definisi struktur data graf:

class Graph:
    def __init__(self, vertices):
        self.V = vertices
        self.adj = [[] for _ in range(vertices)]
    
    def add_edge(self, src, dest):
        self.adj[src].append(dest)
Salin selepas log masuk

Kod di atas mentakrifkan kelas Graf, yang mengandungi pembina dan dua kaedah: add_edge()用于添加边,__init__() digunakan untuk memulakan kelas.

Seterusnya, kita boleh melaksanakan algoritma BFS. Idea asas algoritma BFS adalah untuk bermula dari nod permulaan yang diberikan dan melintasi nod dalam lapisan graf demi lapisan sehingga nod sasaran ditemui. Semasa proses traversal, baris gilir digunakan untuk menyimpan nod yang akan dilawati. Berikut ialah kod untuk melaksanakan algoritma BFS menggunakan Python:

from collections import deque

def BFS(graph, start, goal):
    visited = [False] * graph.V
    queue = deque()

    queue.append(start)
    visited[start] = True

    while queue:
        node = queue.popleft()
        print(node, end=" ")

        if node == goal:
            print("目标节点已找到")
            break

        for i in graph.adj[node]:
            if not visited[i]:
                queue.append(i)
                visited[i] = True

    if not queue:
        print("目标节点未找到")
Salin selepas log masuk

Kod di atas mentakrifkan fungsi yang dipanggil BFS. Fungsi ini menerima tiga parameter: graf objek graf, permulaan nod permulaan dan matlamat nod sasaran. Algoritma menggunakan senarai yang dilawati untuk merekodkan nod yang telah dilawati, dan baris gilir untuk menyimpan nod yang akan dilawati. Dalam setiap gelung, elemen pertama dalam baris gilir dikeluarkan, nod dilawati, dan nod jiran yang tidak dilawati ditambah pada baris gilir. Gelung sehingga nod sasaran ditemui atau baris gilir kosong.

Akhir sekali, kita boleh menggunakan graf yang ditakrifkan di atas dan algoritma BFS untuk aplikasi praktikal. Berikut ialah contoh:

g = Graph(6)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)
g.add_edge(2, 4)
g.add_edge(3, 4)
g.add_edge(3, 5)
g.add_edge(4, 5)

print("BFS遍历结果为:")
BFS(g, 0, 5)
Salin selepas log masuk

Kod di atas mula-mula mencipta objek graf g yang mengandungi 6 nod dan menambah beberapa tepi. Kemudian panggil fungsi BFS untuk mencari laluan bermula dari nod 0 hingga nod 5. Program ini akan mengeluarkan hasil traversal BFS.

Ringkasnya, artikel ini memperkenalkan cara menggunakan Python untuk melaksanakan algoritma carian luas pertama dan menyediakan contoh kod khusus. Dengan struktur data dan perpustakaan fungsi yang berkuasa Python, kami boleh melaksanakan algoritma BFS dengan mudah dan menggunakannya pada pelbagai senario praktikal.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma carian pertama luas menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Apr 01, 2025 pm 11:15 PM

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Bagaimanakah skrip Python jelas output ke kedudukan kursor di lokasi tertentu? Bagaimanakah skrip Python jelas output ke kedudukan kursor di lokasi tertentu? Apr 01, 2025 pm 11:30 PM

Bagaimanakah skrip Python jelas output ke kedudukan kursor di lokasi tertentu? Semasa menulis skrip python, adalah perkara biasa untuk membersihkan output sebelumnya ke kedudukan kursor ...

Bolehkah anotasi parameter Python menggunakan rentetan? Bolehkah anotasi parameter Python menggunakan rentetan? Apr 01, 2025 pm 08:39 PM

Penggunaan alternatif anotasi parameter python Dalam pengaturcaraan Python, anotasi parameter adalah fungsi yang sangat berguna yang dapat membantu pemaju memahami dan menggunakan fungsi ...

Mengapa kod saya tidak dapat mendapatkan data yang dikembalikan oleh API? Bagaimana menyelesaikan masalah ini? Mengapa kod saya tidak dapat mendapatkan data yang dikembalikan oleh API? Bagaimana menyelesaikan masalah ini? Apr 01, 2025 pm 08:09 PM

Mengapa kod saya tidak dapat mendapatkan data yang dikembalikan oleh API? Dalam pengaturcaraan, kita sering menghadapi masalah mengembalikan nilai null apabila panggilan API, yang bukan sahaja mengelirukan ...

Bagaimanakah uvicorn terus mendengar permintaan http tanpa serving_forever ()? Bagaimanakah uvicorn terus mendengar permintaan http tanpa serving_forever ()? Apr 01, 2025 pm 10:51 PM

Bagaimanakah Uvicorn terus mendengar permintaan HTTP? Uvicorn adalah pelayan web ringan berdasarkan ASGI. Salah satu fungsi terasnya ialah mendengar permintaan HTTP dan teruskan ...

Bagaimana secara dinamik membuat objek melalui rentetan dan panggil kaedahnya dalam Python? Bagaimana secara dinamik membuat objek melalui rentetan dan panggil kaedahnya dalam Python? Apr 01, 2025 pm 11:18 PM

Di Python, bagaimana untuk membuat objek secara dinamik melalui rentetan dan panggil kaedahnya? Ini adalah keperluan pengaturcaraan yang biasa, terutamanya jika perlu dikonfigurasikan atau dijalankan ...

Bagaimana untuk menggunakan Go atau Rust untuk memanggil skrip Python untuk mencapai pelaksanaan selari yang benar? Bagaimana untuk menggunakan Go atau Rust untuk memanggil skrip Python untuk mencapai pelaksanaan selari yang benar? Apr 01, 2025 pm 11:39 PM

Bagaimana untuk menggunakan Go atau Rust untuk memanggil skrip Python untuk mencapai pelaksanaan selari yang benar? Baru -baru ini saya telah menggunakan python ...

Di mana untuk memuat turun fail python .whl di bawah tingkap? Di mana untuk memuat turun fail python .whl di bawah tingkap? Apr 01, 2025 pm 08:18 PM

Kaedah muat turun Perpustakaan Python (.whl) Meneroka kesukaran banyak pemaju Python apabila memasang perpustakaan tertentu pada sistem Windows. Penyelesaian yang sama ...

See all articles