Oyuncunun rastgele bir düğüm kümesi verildiği bir oyun yapıyorum ve düğümleri belirli bir sıraya yerleştirerek yapabilecekleri en uzun listeyi oluşturmaya çalışıyor. Her düğümün, listedeki bir sonraki düğümün yanında en az bir bağlantıyla eşleşmesi gereken kenarlarda sıfır veya daha fazla bağlantı vardır. Örneğin, bir düğüm bu gibi görünebilir:Bazı kısıtlamalar göz önüne alındığında, düğümlerin bir listesinin bağlanabileceğini doğrulamak için hangi algoritmayı kullanabilirim?
+--+
left connections A B right connections
B C
+--+
yukarıdaki düğümü (örnek düğüm), bu düğümlerin herhangi biriyle bağlantılı olabilir: o üç düğüm verilen
Yani+--+
C | This node can connect to the right side of the example node (matches C)
D |
+--+
+--+
B K This node can connect to the left side of the example node (matches A)
L A This node can connect to the right side of the example node (matches B)
+--+
, oyuncu olabilir bunları bir listede eşleştirin:
Oyuncunun seçimlerini doğrulamam gerekiyor. Oyuncunun ilk başta doğru sırada düğümleri seçmesi gerekmez, ancak sonuçtaki son seçimler bitişik, doğrusal bir listeye bağlanabilmelidir.
Yani, bir dizi sıralanmamış düğüm (oyuncu seçimi) verildiğinde, düğümleri yukarıdaki gibi geçerli bir listeye yerleştirmem ya da oynatıcıya bir hata göstermem gerekiyor.
Doğrulamayı zorlayabilirim ama daha zarif bir çözüm bulmayı umuyordum.
Given a graph determine whether it has a path traversing all nodes
tam the Hamiltonian problem geçerli:
Bu setler ne kadar büyük olacak? Çok değilse, kaba kuvvetlerden daha ayrıntılı bir şey, sorunlara değmeyebilir. Büyük kümeler için dinamik programlama uygun olabilir. –
@ScottHunter Oyuncunun seçimleri 5 veya 6 düğüm uzunluğunda olabilir. – Stephen
Döngüsüz bir yolu soldan sağa doğru takip etmek yeterli olmaz mıydı? Yani, sadece bir yönde (sağda) -A-'bağlantısında hareket edebilirsiniz ve sadece yukarı/aşağı/sağa hareket edebilirsiniz. Kullanıcıların çıkmaza girecek çok sayıda yol oluşturmasından endişe ediyorsanız, o zaman gerçekten en az bir yaprağın hedefe "yan" ulaştığı bir ağacın ilk geçişini derinlemesine araştırıyorsunuz. En kısa yolu istiyorsanız, dykstra'nın algoritmasının çalışabileceğini düşünüyorum (ama üzerinde biraz bulanıkım). –