Mendapatkan siklus negatif menggunakan Bellman Ford


20

Saya harus menemukan siklus negatif dalam grafik tertimbang yang diarahkan. Saya tahu bagaimana algoritma Bellman Ford bekerja, dan ia memberi tahu saya jika ada siklus negatif yang dapat dijangkau. Tetapi tidak secara eksplisit menyebutkannya.

Bagaimana saya bisa mendapatkan jalur aktual dari siklus?v1,v2,vk,v1

Setelah menerapkan algoritma standar kami sudah melakukan iterasi dan tidak ada perbaikan lebih lanjut yang mungkin dilakukan. Jika kita masih bisa menurunkan jarak ke sebuah simpul, ada siklus negatif.n1

Ide saya adalah: Karena kita tahu tepi yang masih bisa memperbaiki jalur dan kita tahu pendahulu setiap node, kita bisa melacak jalan kita kembali dari tepi itu sampai kita bertemu lagi. Sekarang kita harus memiliki siklus kita.

Sayangnya, saya tidak menemukan kertas yang memberi tahu saya apakah ini benar. Jadi, apakah ini benar-benar berfungsi seperti itu?

Sunting: Contoh ini membuktikan bahwa ide saya salah. Diberikan grafik berikut, kami menjalankan Bellman-Ford dari node .1

masukkan deskripsi gambar di sini

Kami memproses tepian dalam urutan . Setelah n - 1 iterasi kami mendapatkan jarak simpul: 1 : - 5 2 : - 30 3 : - 15a,b,c,dn1
1:5
2:30
3:15

dan tabel induk:
memiliki induk 3 2 memiliki induk 3 3 memiliki induk 213
23
32

n1aa

c,da

Bagaimana kita bisa menyelesaikan masalah ini?

Jawaban:


14

v1

s


tautan rusak.
human.js


Saya hanya menggunakan ide Prof. Huang, tapi saya tidak mengerti mengapa dia menambahkan node sumber baru dan target baru ( s'dan t'). Tampak bagi saya bahwa node sumber baru, terhubung ke semua simpul yang ada dengan tepi berapa pun panjangnya, akan muncul semua siklus.
AbuNassar

0

Teladan Anda tidak bertentangan dengan ide Anda. Memang Anda telah menemukan siklus negatif. Saya pikir ide contoh Anda menggambarkan bahwa sumber simpul mungkin bukan simpul dalam siklus negatif.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.