Kule savunma labirent (sınırlı duvarları ile en uzun labirent) oluşturma - yakın-optimal sezgisel?
Bir kule savunma oyunu, bir başlangıç, bir bitiş, ve duvarlar bir dizi bu yüzden olmak üzere bir ızgara var.
Düşman baştan en kısa yol duvarlardan geçmeden bitirmek için(genellikle ızgara kısıtlı değiller, ama basitlik aşkına hadi söylüyorlar. Her iki durumda da, çapraz hareket edemezler "delik")
Sorun(bu soru için en azından)yerkadarDüşmanları almak için yolunu uzatmak için K ek duvarlar. K örneğin,=14
Benim sezgi bu problem NP-zor olduğunu söylüyorböyle devam etmeyi umuyorumbiz bu yol işaretleri olmadan bitirmek için, ve belki de taşımadan önce ziyaret edilmesi gereken yol işaretleri dahil et.
Ama,orada herhangi bir iyi bir keşif vardıryakın-optimal çözüm?
[Düzenle]3* *ile ilgili bir soru attılar.
CEVAP
Açgözlü bir yaklaşım var ve (ama yaklaşım faktörü bulamadım) yakınlarındaki için en uygun olduğunu düşünüyorum. Fikir basit olan hücreleri engellemelisinizkritiksenin Labirent yerine, Bu yerler normalde labirent bağlantısı için ölçmek. Bu bağlantı köşe bağlantı olarak görülebilir ve motivasyon minimum tepe noktası başlangıç yolunu ve son kesim bulma(s,f). Bundan sonra bazı kritik hücreleri kaldırabilirsiniz.
Algoritma başlamadan önce, labirent ızgara çift, muhabiri grafik bulmak için zaman ayırın. Şimdi asgari bulabilirsiniz(s,f)köşe, bu kesim her köşe incelemek, arasındaki maksimum uzunluk yola çıkarma nedenleri gibi tepe kaldırdıktan sonra, grafikteki kess,fya f nin minimum yolunda. yine asgari (s,f) köşe, ... bulmak kesilmiş ve bu k
düğümleri ortadan kaldırmak için devam ediyor.
Sorun olduğunda istediğiniz Kaldır bir düğüm olan nedenler kesim arasında s,f, önlenmesi için bu ağırlık kesme düğümü olabildiğince yüksek, demek ilk hesaplama asgari (s,f) kesme, kesme sonucu sadece bir düğüm, ağırlıklı ve set ağırlığı için n^3, şimdi tekrar hesaplamak minimum sf kes emin tek kesim düğüm önceki hesaplama değil ait olduğu için yeni kesilmiş. Ama eğer s,f arasında sadece bir yol varsa (bazı tekrarlamalar sonra) geliştirebilirsin. Bu durumda herhangi bir kesme ait olmayan f s en kısa yol bir düğüm kaldırma gibi normal açgözlü algoritmalar kullanabilirsiniz. ondan sonra yine en az köşe kesme ile başa çıkabilirim.
Algoritma her adımda zaman çalışıyor:
min-cut path finding for all nodes in min-cut
O(min cut) O(n^2)*O(number of nodes in min-cut)
Ve çünkü sayısı düğümleri min kesemezsiniz olmak bir büyüktür O(n^2) çok çok kötü bir durum bu algoritma O(k)*n^4) ama normalde bazen işe yaramaz daha O(k)*n^3), çünkü normalde min-kesme algoritması hakim yol bulma, normalde, yol bulma yok alır O(n^2).
Ayrıca bu açgözlü seçim tavlama benzetimi algoritmaları için iyi bir motivasyon olabilir bence.
P. S: kesme kenarı asgari benzer asgari köşe kesme,ve max-flow/dak-kesme benzer bir yaklaşım gibi minimum köşe kesme uygulanabilir,sadece farz iki tepe noktası olarak her köşe,bir V
Programlama teorisi: bir labirent Çözm...
Temsil eden ve labirent gibi bir görün...
Java:uzun Dize / Cast Dönüştürmek ?...
Bir URL oluşturma denetleyicisi .NET M...
T-SQL datetime yuvarlak kullanarak saa...