Saya mencari sebuah algoritma untuk mengubah digraf (grafik berarah) menjadi grafik tidak terarah dengan cara yang dapat dibalik, yaitu digraf harus direkonstruksi jika kita diberi grafik yang tidak terarah. Saya mengerti bahwa ini akan menyebabkan grafik yang tidak diarahkan memiliki lebih banyak titik tetapi saya tidak keberatan.
Apakah ada yang tahu bagaimana melakukan ini atau dapat menyarankan referensi? Terima kasih sebelumnya.
Pembaruan: Mengenai jawaban AdrianN di bawah ini. Ini mungkin merupakan titik awal yang baik tetapi saya tidak berpikir itu berfungsi dalam bentuk saat ini. Berikut ini adalah gambaran mengapa saya pikir itu tidak:
Pembaruan setelah komentar DW: Saya menganggap simpul grafik tidak berlabel. Jika suatu solusi melibatkan pelabelan simpul (seperti yang dilakukan AdrianN), maka solusi tersebut harus memberikan grafik yang tidak terarah (isomorfik) yang sama tidak peduli bagaimana pelabelan dilakukan. Definisi saya tentang "isomorfik" untuk grafik dengan simpul berlabel adalah bahwa ada permutasi dari pelabelan yang menghubungkan dua grafik, tetapi saya tidak yakin dengan definisi yang tepat untuk grafik yang tidak berlabel ...
sumber
Jawaban:
Untuk setiap tepi terarah , tambahkan simpul baru dan ganti dengan edge , , , , , .e=(x,y) e x v e 1 v e 1 v e 2 v e 1 v e 3 v e 3ve1,…,ve5 e xve1 ve1ve2 ve1ve3 v e 4 v e 5 v e 3 yve3ve4 ve4ve5 ve3y
Untuk memecahkan kode, setiap daun (derajat-1 simpul) yang tetangganya memiliki derajat 2 harus untuk beberapa tepi ; tetangganya adalah dan tetangga lain dari adalah . memiliki tetangga unik yang memiliki derajat 3 dan berdekatan dengan daun: tetangga adalah dan daunnya (jika memiliki dua tetangga daun, pilih satu dengan sewenang-wenang menjadi ). Tetangga lain dari adalah dan tetangga lain dari adalah . Kembalikan tepi yang diarahkan e = ( x , y ) v e 4 v e 4 v e 3 v e 3 v e 1 v e 2 v e 1 v e 2 v e 1 x v e 3 y ( x , y ) v e 1 , ... , v e 5ve5 e=(x,y) ve4 ve4 ve3 ve3 ve1 ve2 ve1 ve2 ve1 x ve3 y (x,y) dan hapus simpul .ve1,…,ve5
sumber
Jawaban David Richerby (yang diterima) bagus.
Saya mengikuti instruksinya pada contoh digraf yang sederhana, dan berharap itu membantu seseorang.
(Saya akan memposting ini sebagai komentar atas jawaban David, tetapi saya tidak memiliki poin reputasi yang diperlukan.)
sumber
Untuk mengonversi grafik berarah ke grafik tak berarah lakukan hal berikut:GD G
Ketika melakukan persatuan yang terpisah, seseorang harus berhati-hati untuk membuatnya dapat dibalik.
sumber
Bagaimana dengan fungsi identitas? Yaitu setiap digraf dapat dilihat sebagai grafik bipartit yang tidak terarah dengan partisi berukuran sama dan sebaliknya.
sumber
Inilah tikaman di ini:
Ganti informasi arah dengan simpul tambahan di grafik yang tidak diarahkan. Dengan kata lain, gunakan simpul tambahan di grafik yang tidak diarahkan untuk "menyandikan" informasi arah. Misalnya, untuk setiap simpul langsung dengan setidaknya satu tepi, tambahkan sejumlah simpul tidak berarah sama dengan 1 + jumlah tepi "masuk". Vertikal dengan nol tepi tetap tidak berubah.
Untuk melakukan arah sebaliknya, buat simpul diarahkan untuk setiap simpul yang memiliki 0 atau lebih dari 1 tepi. (Verteks dengan tepat satu tepi adalah simpul "arah pengkodean"). Setiap tepi yang menghubungkan titik multi-bermata lain adalah koneksi dalam grafik yang diarahkan. Sekarang adalah bagian yang sulit yang saya tidak bisa jelaskan tentang algoritme untuk (tapi saya rasa ada): Anda harus menyimpulkan arah panah yang diberikan hanya jumlah panah yang masuk untuk setiap titik.
Saya pikir bagian yang sulit adalah seperti bermain kapal penyapu ranjau :-) Cari tahu di mana bom (tepi masuk) diberi jumlah bom yang berdekatan untuk setiap kotak (titik).
sumber