Bağlantılı özdeş sembollerin her bir grubunu (ve bağlantılı olarak, bir sembolden diğerine seyahat edebileceğinizi) ayrı bir grafik olarak düşünebilirsiniz . Bu tür her grafik için , grafikteki her düğümden başlayarak o grafik için en uzun yolun parçası olmayan bir Derinlik İlk Arama (DFS) uygulayın . Bir DFS uygularken çıkmaza her ulaştığınızda, az önce gezdiğiniz yolun şimdiye kadar bulduğunuz küresel maksimumdan daha uzun olup olmadığını kontrol edin. Öyleyse, en uzun yol olarak saklayın.
Önceki paragrafta, her grafik için bir DFS uygulamasından birkaç kez bahsettiğimi fark edeceksiniz. Bir grafik üzerinde çalışan tek bir DFS yeterli olmaz. Bu özel durumu düşünün:
1
1 1 1
1
1
1
1
Şans eseri bu grafikte ilk olarak en üstteki düğümde bir DFS çalıştırırsanız, mümkün olan en uzun yolu dikey çizgi olarak keşfedersiniz, ancak bu doğru olmaz. Bu, DFS algoritmasını, sonuçta ortaya çıkan yolun bir yerinde olan veya hiç bir parçası olmayan bir düğümde her başlattığınızda gerçekleşir. Bu özel örnekte yapmanız gereken, ikinci satırdaki en soldaki düğümden bir DFS algoritması başlatmaktır. Doğru yolu bulacaktır. Genel olarak, yukarıda belirtildiği gibi, o grafik için en uzun yolun parçası olmayan her düğümde DFS algoritmaları çalıştırmanız gerekir.
Bu algoritma için en kötü durum senaryosu, tek bir sembol türüyle dolu veya çoğunlukla dolu bir tahta olacaktır, ancak bu oyunda gerçekleşme olasılığı düşüktür. Ayrıca, her grafik için en uzun yolları nasıl sakladığınıza dikkat edin. Bu biti optimize etmezseniz, sahnedeki her düğüm için bir DFS çağırmak daha iyi olabilir. Çok büyük tahtalarla çalışmadığınızı ve hızın bu kadar büyük bir sorun olmadığını varsayarsak, bu çözüm yeterince hızlı olmalıdır.
Teknik olarak, tahtanızı ayrı grafiklere bölerek birden çok " En uzun yol problemi " ile sonuçlanırsınız . Örneğinizden görebildiğimiz gibi, grafiğinizde döngüler olabilir (örneğin, aynı türdeki sahnenin dışındaki tüm sembollere sahip olabilirsiniz), yani bu özel problemde en uzun yolu bulmanız gerekir polinom zamanında yapılamayan birkaç döngüsel yönlendirilmemiş grafikte .
Bunun çok yavaş olduğunu fark ederseniz , tek tek "En Uzun Yol Sorunları" nı optimize etme konusunda daha fazla ayrıntı için StackOverflow'daki bu cevaba bakın .