cari
Rumahpembangunan bahagian belakangTutorial PythonBagaimana untuk melaksanakan algoritma Dijkstra menggunakan Python?

Bagaimana untuk melaksanakan algoritma Dijkstra menggunakan Python?

Sep 21, 2023 pm 12:58 PM
pythoncapaiPelaksanaan Python bagi algoritma DijkstraAlgoritma Dijkstra

Bagaimana untuk melaksanakan algoritma Dijkstra menggunakan Python?

Bagaimana untuk melaksanakan algoritma Dijkstra menggunakan Python?

Pengenalan:
Algoritma Dijkstra ialah algoritma laluan terpendek sumber tunggal yang biasa digunakan yang boleh digunakan untuk menyelesaikan masalah laluan terpendek antara dua bucu dalam graf berwajaran. Artikel ini akan memperkenalkan secara terperinci cara menggunakan Python untuk melaksanakan algoritma Dijkstra, termasuk prinsip algoritma dan contoh kod khusus.

  1. Prinsip algoritma
    Idea teras algoritma Dijkstra adalah untuk secara beransur-ansur menentukan laluan terpendek dari titik sumber ke bucu lain dengan terus memilih bucu yang paling hampir dengan titik sumber. Algoritma ini terbahagi terutamanya kepada langkah-langkah berikut:
    (1) Permulaan: Tetapkan jarak dari titik sumber ke bucu lain kepada infiniti, dan jarak dari titik sumber ke dirinya sendiri kepada 0. Pada masa yang sama, cipta kamus yang merekodkan laluan terpendek dan koleksi yang merekodkan bucu yang telah dilawati.
    (2) Pilih bucu yang belum dilawati pada masa ini yang paling hampir dengan titik sumber, tandai sebagai dilawati dan kemas kini jarak dari titik sumber ke bucu bersebelahan.
    (3) Ulangi langkah di atas sehingga semua bucu telah dilawati atau tiada bucu yang boleh dipilih pada masa ini.
  2. Pelaksanaan Kod
    Berikut ialah contoh kod menggunakan Python untuk melaksanakan algoritma Dijkstra:
import sys

def dijkstra(graph, start):
    # 初始化
    distances = {vertex: sys.maxsize for vertex in graph}  # 记录源点到各顶点的距离
    distances[start] = 0
    visited = set()
    previous_vertices = {vertex: None for vertex in graph}  # 记录最短路径的前驱结点

    while graph:
        # 选择当前距离源点最近的未访问顶点
        current_vertex = min(
            {vertex: distances[vertex] for vertex in graph if vertex not in visited},
            key=distances.get
        )

        # 标记为已访问
        visited.add(current_vertex)

        # 更新当前顶点的相邻顶点的距离
        for neighbor in graph[current_vertex]:
            distance = distances[current_vertex] + graph[current_vertex][neighbor]
            if distance < distances[neighbor]:
                distances[neighbor] = distance
                previous_vertices[neighbor] = current_vertex

        # 当前顶点从图中移除
        graph.pop(current_vertex)

    return distances, previous_vertices


# 示例使用
if __name__ == '__main__':
    # 定义图结构(字典表示)
    graph = {
        'A': {'B': 5, 'C': 1},
        'B': {'A': 5, 'C': 2, 'D': 1},
        'C': {'A': 1, 'B': 2, 'D': 4, 'E': 8},
        'D': {'B': 1, 'C': 4, 'E': 3, 'F': 6},
        'E': {'C': 8, 'D': 3},
        'F': {'D': 6}
    }

    start_vertex = 'A'
    distances, previous_vertices = dijkstra(graph, start_vertex)

    # 打印结果
    for vertex in distances:
        path = []
        current_vertex = vertex
        while current_vertex is not None:
            path.insert(0, current_vertex)
            current_vertex = previous_vertices[current_vertex]
        print(f'最短路径: {path}, 最短距离: {distances[vertex]}')

Contoh kod di atas menunjukkan cara menggunakan algoritma Dijkstra untuk mencari laluan terpendek dan jarak terpendek dari titik sumber ke setiap bucu dalam sesuatu struktur graf.

Kesimpulan:
Artikel ini memperkenalkan prinsip algoritma Dijkstra secara terperinci dan memberikan contoh kod untuk melaksanakan algoritma Dijkstra menggunakan Python. Pembaca boleh mengubah suai dan mengembangkan kod sampel untuk digunakan pada senario yang lebih kompleks. Dengan menguasai algoritma ini, pembaca boleh menyelesaikan masalah laluan terpendek dalam graf berwajaran dengan lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma Dijkstra menggunakan Python?. 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
Python: menyelam mendalam ke dalam kompilasi dan tafsiranPython: menyelam mendalam ke dalam kompilasi dan tafsiranMay 12, 2025 am 12:14 AM

Pythonusesahybridmodelofcompilationandinterpretation: 1) thepythoninterpretercompilessourcodcecodeintoplatform-independentbytecode.2) thepythonvirtualmachine (PVM) thenexecutesthisbytecode, BalantingeaseOfusoWithperformance.

Adakah Python diterjemahkan atau bahasa yang disusun, dan mengapa ia penting?Adakah Python diterjemahkan atau bahasa yang disusun, dan mengapa ia penting?May 12, 2025 am 12:09 AM

Pythonisbothinterpretedandandcompiled.1) it'scompiledtobytecodeforporabilityAcrossplatforms.2) theBytecodeistheninterpreted, membolehkanfordynamictypingandrapiddevelopment, walaupunItmayBeslowerLowerWanLelyCiledlanguages.

Untuk gelung vs semasa gelung di python: perbezaan utama dijelaskanUntuk gelung vs semasa gelung di python: perbezaan utama dijelaskanMay 12, 2025 am 12:08 AM

ForloopsareidealwhenyonesshenumberofiterationsationseSinadvance, whilewhileloopsarebetterforsituationshipheryouneedtoloopuntilaconditionismet.forloopsaremoreeficientablyandable, yang sesuai, manakala whileloopsoffermorecontrolandareusefereficeficeficeficeficient,

Untuk dan semasa gelung: panduan praktikalUntuk dan semasa gelung: panduan praktikalMay 12, 2025 am 12:07 AM

Forloopsareusedwhenthenumberofiterationsisknowninadvance, whilewhileloopsareusedwhenTheiterationsdependonacondition.1) forloopsareidealforiteratingoversequencesLikeListsorArrays.2)

Python: Adakah ia benar -benar ditafsirkan? Membebaskan mitosPython: Adakah ia benar -benar ditafsirkan? Membebaskan mitosMay 12, 2025 am 12:05 AM

Pythonisnotpurelyinterinterpreted; itusesahybridapproachofbytecodecompilationandruntimeinterpretation.1) pythoncompilessourcecodeintobytecode, whoomeSthenexecutedbythepythonvirtualmachine (pvm)

Senarai concatenate python dengan elemen yang samaSenarai concatenate python dengan elemen yang samaMay 11, 2025 am 12:08 AM

ToConcatenatelistsinpythonwiththesameelements, gunakan: 1) operatortokokduplicates, 2) asettoremoveduplicates, OR3) listomprehensionfensionfensionfensionfensiontroloverduplicates, setiapmethodhasdifferentperformanceAdordlications.

Ditafsirkan vs bahasa yang disusun: Tempat PythonDitafsirkan vs bahasa yang disusun: Tempat PythonMay 11, 2025 am 12:07 AM

Pythonisaninterpretedlanguage, menawarkanfuseofuseandflexibilitybutfacingperpormancelimitationsincriticalapplications.1) interpretlanguagesepythonexecuteline-by-line, membolehkanMmediateDebackandrapidprototyping.2)

Untuk dan semasa gelung: Bilakah anda menggunakan setiap python?Untuk dan semasa gelung: Bilakah anda menggunakan setiap python?May 11, 2025 am 12:05 AM

Useforloopswhenthenumberofiterationsisknowninadvance,andwhileloopswheniterationsdependonacondition.1)Forloopsareidealforsequenceslikelistsorranges.2)Whileloopssuitscenarioswheretheloopcontinuesuntilaspecificconditionismet,usefulforuserinputsoralgorit

See all articles

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.