Jadual Kandungan
Tatabahasa
Parameter
Algoritma
Contoh
输出
结论
Rumah pembangunan bahagian belakang C++ Cari laluan terpendek antara mana-mana dua nod menggunakan algoritma Floyd-Warshal

Cari laluan terpendek antara mana-mana dua nod menggunakan algoritma Floyd-Warshal

Sep 20, 2023 pm 02:21 PM
nod laluan terpendek Algoritma Freud-Warshal

C++ mempunyai makro, yang ditakrifkan sebagai sekeping kod atau nilai yang dijangkakan, dan ia akan digunakan semula pada bila-bila masa pengguna memerlukannya. Algoritma Floyd-Walshall ialah proses mencari laluan terpendek antara semua pasangan bucu dalam graf berwajaran tertentu. Algoritma mengikut pendekatan pengaturcaraan dinamik untuk mencari graf berat minimum.

Mari kita fahami maksud Algoritma Freud-Walshire melalui gambar rajah -

Cari laluan terpendek antara mana-mana dua nod menggunakan algoritma Floyd-Warshal

Dengan bucu 1 sebagai sumber dan bucu 4 sebagai destinasi, cari jalan terpendek di antara mereka.

Kami telah melihat bahawa terdapat dua laluan yang boleh disambungkan ke puncak sasaran 4.

  • 1 -> 4 – Tepi mempunyai berat 5

  • 1 -> 8 -> 3 ->

Dalam graf I yang diberikan, kita melihat tepi minimum yang menghubungkan dua bucu. Jadi di sini laluan dari bucu 8 ke bucu 3 menghubungkan bucu 1 ke bucu 4 dan tepi ialah 4. Sebaliknya, terdapat tepi terarah dari bucu 1 ke bucu 4, dan berat tepi ialah 5.

Sekarang kita bandingkan dua pemberat iaitu 4 dan 5. Oleh itu, di sini 4 ialah berat minimum graf yang dikira mengikut algoritma Floyd Warshall.

Dalam artikel ini, kami akan menggunakan algoritma Floyd Warshall untuk mencari laluan terpendek antara mana-mana dua nod yang diberikan.

Tatabahasa

Sintaks berikut digunakan dalam program -

data_type[][] array_name;
Salin selepas log masuk

Parameter

data_type[][] - Jenis data yang disebut oleh pengguna. Tatasusunan pertama mewakili baris dan tatasusunan kedua mewakili lajur. Jadi, ini mewakili tatasusunan dua dimensi.

array_name - Nama yang diberikan kepada array.

Algoritma

  • Kami akan memulakan program dengan fail pengepala 'iostream' dan mentakrifkan lokasi makro sebagai 'INF' (infiniti) kerana kemudiannya ia akan memenuhi matriks tatasusunan 2D dan pernyataan if-else.

  • Seterusnya, kami mencipta definisi fungsi global yang dipanggil 'printPath' dan menerima tiga parameter, 'parent[]', 'i' dan 'j' untuk mengesahkan bahawa laluan itu wujud.

  • Kemudian kita mulakan fungsi utama dan simpan nilai ‘4’ ke dalam pembolehubah ‘V’, yang mewakili bilangan bucu. Kedua, simpan nilai dalam bentuk matriks bersebelahan ke dalam pembolehubah ‘dist[V][V]’. Seperti yang kita ketahui, dist[i][j] mewakili matriks 2D, yang mentakrifkan berat tepi daripada ‘i’ hingga ‘j’, dengan menyimpan matriks bersebelahan.

  • Seterusnya, kami memulakan tatasusunan 2D untuk pembolehubah ‘induk’, dengan saiz [V][V].

  • Dalam pembolehubah ini kita gunakan untuk memaparkan setiap pasangan bucu 'i' dan 'j' w.r.t 'ibu bapa[i][j]'< /b>.

  • Dengan menggunakan dua gelung bersarang kita akan mencari laluan terpendek. Gelung untuk pertama berulang ke atas baris dalam matriks. Kemudian, ulangi lajur dalam matriks melalui gelung kedua untuk dan kemudian kami akan menyemak keadaan berikut menggunakan pernyataan if-else -

    • Jika (dist[i][j] != INF && i != j) { Terjemahan bahasa Cina bagi ibu bapa[i][j] = i;}

      ialah: ibu bapa[i][j] = i;}

      Dalam pernyataan if, kami menggunakan operator 'and' (&&) untuk menyatakan dua syarat jika kedua-dua syarat dipenuhi, maka 'i' akan disimpan ke dalam 'parent[i][j]' , dengan itu mengesahkan bahawa. jalan itu wujud.

    • Lain-lain{ Terjemahan bahasa Cina bagi parent[i][j] = -1;}

      ialah: parent[i][j] = -1;}

      Dalam pernyataan else, kami memulakan "-1" kepada "ibu bapa[i][j]" untuk mengesahkan bahawa laluan itu tidak wujud.

  • Kini kita mulakan dengan tiga gelung untuk bersarang dan menggunakan bucu k dalam julat dari 0 hingga V-1, dengan bantuan julat ini jarak dan laluan terpendek kita akan dikemas kini. Dalam gelung bersarang ketiga kami menggunakan keadaan berikut seperti

if (dist[i][j] < dist[i][k] + dist[k][j]){
   dist[i][j] = dist[i][k] + dist[k][j]; 
   parent[i][j] = parent[k][j];	
}
Salin selepas log masuk

    Di sini K sedang mengemas kini bahagian baris dan lajur matriks tatasusunan 2D, yang mengesahkan laluan dan jarak terpendek yang baru dikemas kini.

  • Seterusnya, kami mencetak jarak dan laluan terpendek bagi semua pasangan bucu dengan memberikan syarat berikut

    • Dengan menggunakan dua gelung bersarang, kami mencetak jarak dan laluan terpendek.

    • Dengan menggunakan pernyataan if di bawah gelung kedua untuk, kami akan menyemak sama ada dist[i][j] bersamaan dengan infiniti. Jika ia didapati infiniti, cetak "INF", jika tidak cetak laluan terpendek.

  • Akhir sekali, kami memanggil fungsi yang dipanggil 'printPath()' dengan melepasi tiga parameter (induk [i], i dan j.

Contoh

Dalam program ini, kami akan menggunakan algoritma Floyd Warshall untuk mengira laluan terpendek antara mana-mana dua nod.

#include <iostream> 
using namespace std; 
#define INF 1000000000 // Infinity

void printPath(int parent[], int i, int j) {
   if (i == j) 
      cout << i << " "; 
   else if (parent[j] == -1) 
     cout << "No path exists"; 
   else
   { 
      printPath(parent, i, parent[j]); 
      cout << j << " "; 
   }
} 

int main() 
{
   int V = 4; 
   // V represent number of vertices
   int dist[V][V] = {{0, 2, INF, 4}, 
      {6, 0, 5, 3}, 
      {INF, 10, 0, 1}, 
      {7, 9, 8, 0}}; 
   // Represent the graph using adjacency matrix

   // Apply the Floyd Warshall algorithm to find the shortest paths
   int parent[V][V];
   for (int i = 0; i < V; i++) 
   { 
      for (int j = 0; j < V; j++) 
      {
         if (dist[i][j] != INF && i != j)
         parent[i][j] = i;
         else
         parent[i][j] = -1;
      }
   }
   // update the path and distance using the k vertex range from 0 to V-1.
   for (int k = 0; k < V; k++) 
   { 
      for (int i = 0; i < V; i++) 
      { 
         for (int j = 0; j < V; j++) 
         { 
            if (dist[i][j] > dist[i][k] + dist[k][j]) 
            {
               dist[i][j] = dist[i][k] + dist[k][j];
               parent[i][j] = parent[k][j];	
            }
         }
      }
   }

   // Print shortest distances and paths between all pairs of vertices
   for (int i = 0; i < V; i++) 
   { 
      for (int j = 0; j < V; j++) 
      { 
         cout << "The Shortest distance between " << i << " and " << j << " is ";
         if (dist[i][j] == INF) 
            cout << "INF "; 
         else
            cout << dist[i][j] << " ";

         cout << "and the shortest path is:- ";
         printPath(parent[i], i, j);
         cout << endl;
      } 
   } 

   return 0; 
}
Salin selepas log masuk

输出

The Shortest distance between 0 and 0 is 0 and the shortest path is:- 0 
The Shortest distance between 0 and 1 is 2 and the shortest path is:- 0 1 
The Shortest distance between 0 and 2 is 7 and the shortest path is:- 0 1 2 
The Shortest distance between 0 and 3 is 4 and the shortest path is:- 0 3 
The Shortest distance between 1 and 0 is 6 and the shortest path is:- 1 0 
The Shortest distance between 1 and 1 is 0 and the shortest path is:- 1 
The Shortest distance between 1 and 2 is 5 and the shortest path is:- 1 2 
The Shortest distance between 1 and 3 is 3 and the shortest path is:- 1 3 
The Shortest distance between 2 and 0 is 8 and the shortest path is:- 2 3 0 
The Shortest distance between 2 and 1 is 10 and the shortest path is:- 2 1 
The Shortest distance between 2 and 2 is 0 and the shortest path is:- 2 
The Shortest distance between 2 and 3 is 1 and the shortest path is:- 2 3 
The Shortest distance between 3 and 0 is 7 and the shortest path is:- 3 0 
The Shortest distance between 3 and 1 is 9 and the shortest path is:- 3 1 
The Shortest distance between 3 and 2 is 8 and the shortest path is:- 3 2 
The Shortest distance between 3 and 3 is 0 and the shortest path is:- 3 
Salin selepas log masuk

结论

我们学习了使用Floyd Warshall算法找到任意两个节点之间的最短路径的概念。我们使用邻接矩阵作为程序的输入,通过它我们找到了最短路径和距离。此外,为了更新路径和距离,我们使用了k个顶点来更新行和列。在我们的日常生活中,我们在谷歌地图上搜索最短路线或路径,从一个起点到目的地。

Atas ialah kandungan terperinci Cari laluan terpendek antara mana-mana dua nod menggunakan algoritma Floyd-Warshal. 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 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 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)

Jumlah semua pasangan laluan terpendek dalam pokok itu Jumlah semua pasangan laluan terpendek dalam pokok itu Aug 28, 2023 pm 03:17 PM

Dalam pokok, istilah "jumlah laluan terpendek bagi semua pasangan nod" merujuk kepada pengiraan jumlah laluan terpendek individu bagi semua pasangan nod. Kaedah yang berkesan ialah menggunakan algoritma dwi DFS (depth first search). Jarak antara nod yang dipilih dan setiap nod lain ditentukan semasa pas DFS pertama. Pokok itu dilalui semula semasa pas DFS kedua, dengan mengambil kira setiap nod sebagai potensi LCA (nenek moyang paling rendah) dan mengira jumlah jarak antara pasangan nod keturunan LCA yang dipilih. Menggunakan kaedah ini, anda boleh mengira jumlah laluan terpendek untuk semua pasangan nod dalam pepohon dan memastikan penyelesaian yang ideal Kaedah yang digunakan kaedah DFS DFS (Depth First Search) Kaedah pengaturcaraan dinamik Kaedah DFS (Depth First Search) untuk pokok. Semua pasangan laluan terpendek

Soal berat minimum dalam subpokok bermula dari nod X dan jarak paling banyak D Soal berat minimum dalam subpokok bermula dari nod X dan jarak paling banyak D Aug 25, 2023 am 11:25 AM

Apabila melakukan pengaturcaraan komputer, kadangkala adalah perlu untuk mencari berat minimum subpokok yang berasal dari nod tertentu, dengan syarat subpokok tidak boleh mengandungi nod yang lebih daripada unit D dari nod yang ditentukan. Masalah ini timbul dalam pelbagai bidang dan aplikasi, termasuk teori graf, algoritma berasaskan pokok, dan pengoptimuman rangkaian. Subpokok ialah subset struktur pokok yang lebih besar, dengan nod yang ditentukan berfungsi sebagai nod akar subpokok. Subpohon mengandungi semua keturunan nod akar dan tepi penghubungnya. Berat nod merujuk kepada nilai khusus yang diberikan kepada nod itu, yang boleh mewakili kepentingan, kepentingan atau metrik lain yang berkaitan. Dalam masalah ini, matlamatnya adalah untuk mencari berat minimum antara semua nod dalam subpokok sambil mengehadkan subpokok kepada nod yang paling banyak unit D dari nod akar. Dalam artikel berikut, kita akan menyelidiki kerumitan perlombongan pemberat minimum daripada subpokok

Bagaimana untuk melaksanakan algoritma laluan terpendek menggunakan java Bagaimana untuk melaksanakan algoritma laluan terpendek menggunakan java Sep 19, 2023 am 08:18 AM

Gambaran keseluruhan cara menggunakan Java untuk melaksanakan algoritma laluan terpendek: Algoritma laluan terpendek ialah aplikasi penting dalam teori graf dan digunakan secara meluas dalam penghalaan rangkaian, navigasi peta dan medan lain. Dalam artikel ini, kita akan belajar cara melaksanakan algoritma laluan terpendek menggunakan Java dan memberikan contoh kod konkrit. Idea algoritma: Terdapat banyak cara untuk melaksanakan algoritma laluan terpendek, antaranya dua algoritma yang paling terkenal ialah algoritma Dijkstra dan algoritma A*. Di sini kita akan memberi tumpuan kepada pelaksanaan algoritma Dijkstra. Asas algoritma Dijkstra

Bagaimana untuk melaksanakan fungsi salinan dan potong nod peta minda melalui Vue dan jsmind? Bagaimana untuk melaksanakan fungsi salinan dan potong nod peta minda melalui Vue dan jsmind? Aug 15, 2023 pm 05:57 PM

Bagaimana untuk melaksanakan fungsi salinan dan potong nod peta minda melalui Vue dan jsmind? Peta minda ialah alat pemikiran biasa yang boleh membantu kita menyusun pemikiran kita dan menyusun logik pemikiran kita. Fungsi salin dan potong nod adalah operasi yang biasa digunakan dalam peta minda, yang membolehkan kami menggunakan semula nod sedia ada dengan lebih mudah dan meningkatkan kecekapan organisasi berfikir. Dalam artikel ini, kami akan menggunakan dua alat Vue dan jsmind untuk melaksanakan fungsi salinan dan potong nod peta minda. Pertama, kita perlu memasang Vue dan jsmind dan buat

Apakah kaedah untuk memadam nod dalam js Apakah kaedah untuk memadam nod dalam js Sep 01, 2023 pm 05:00 PM

Kaedah untuk memadam nod dalam js ialah: 1. Kaedah removeChild() digunakan untuk mengeluarkan nod anak yang ditentukan daripada nod induk Ia memerlukan dua parameter Parameter pertama ialah nod anak untuk dipadamkan, dan parameter kedua ialah nod induk. 2. Kaedah parentNode.removeChild() boleh dipanggil terus melalui nod induk untuk memadamkan nod anak; Atribut innerHTML digunakan untuk memadam kandungan nod.

Cari laluan terpendek antara mana-mana dua nod menggunakan algoritma Floyd-Warshal Cari laluan terpendek antara mana-mana dua nod menggunakan algoritma Floyd-Warshal Sep 20, 2023 pm 02:21 PM

C++ mempunyai makro, yang ditakrifkan sebagai sekeping kod atau nilai yang dijangkakan, dan ia akan digunakan semula apabila pengguna memerlukannya. Algoritma Floyd-Walshall ialah proses mencari laluan terpendek antara semua pasangan bucu dalam graf berwajaran tertentu. Algoritma mengikut pendekatan pengaturcaraan dinamik untuk mencari graf berat minimum. Marilah kita memahami maksud algoritma Floyd-Walshall melalui rajah - ambil bucu 1 sebagai sumber dan bucu 4 sebagai destinasi dan cari laluan terpendek di antara mereka. Kami telah melihat bahawa terdapat dua laluan yang boleh disambungkan ke bucu sasaran 4. 1->4 – tepi mempunyai berat 51->8->3->4 – berat tepi (1+2+1) ialah 4. Dalam graf I yang diberikan, kita melihat tepi terkecil yang menghubungkan dua bucu. Jadi di sini puncaknya

Cara membuat, memadam, menambah dan menggantikan nod elemen dalam js (dengan contoh kod) Cara membuat, memadam, menambah dan menggantikan nod elemen dalam js (dengan contoh kod) Aug 06, 2022 pm 05:26 PM

Artikel ini terutamanya memperkenalkan cara membuat, memadam, menambah dan menggantikan nod elemen dalam js. Saya harap ia akan membantu rakan yang memerlukan!

Idea reka bentuk algoritma PHP: Bagaimana untuk mencapai penyelesaian yang cekap kepada masalah laluan terpendek graf? Idea reka bentuk algoritma PHP: Bagaimana untuk mencapai penyelesaian yang cekap kepada masalah laluan terpendek graf? Sep 19, 2023 pm 03:43 PM

Idea reka bentuk algoritma PHP: Bagaimana untuk mencapai penyelesaian yang cekap kepada masalah laluan terpendek graf? Dalam pembangunan sebenar, kita selalunya perlu menyelesaikan masalah laluan terpendek, seperti dalam navigasi peta, penghalaan rangkaian, pengedaran logistik dan bidang lain. Algoritma laluan terpendek untuk graf adalah kunci untuk menyelesaikan jenis masalah ini. Graf terdiri daripada satu set bucu dan satu set tepi. Bucu mewakili nod, dan tepi mewakili hubungan antara nod. Masalah laluan terpendek ialah mencari laluan terpendek yang menghubungkan dua nod. Dalam PHP, kita boleh menggunakan pelbagai algoritma untuk menyelesaikan masalah laluan terpendek, yang paling terkenal ialah

See all articles