Dürüst olmak gerekirse, bunun henüz sorulmamış olduğuna inanamıyorum, ama işte burada
Arka fon
Basit bir yönlendirilmemiş düzlemsel (grafik kavşak olmadan düzlemde çizilebilir) grafiği göz önüne alındığında , grafiğin biraz renklendirileceğimiz bir terim olan 4 renklendirilebilir olduğu kanıtlanmış bir teoremdir. Bununla birlikte, bir grafiği 5 renklendirmek çok daha kolay, bu da bugünkü mücadelemize odaklanacağız.
Bir grafiğin geçerli bir k-rengi, aşağıdaki özelliklere sahip grafiğin düğümlerine "renklerin" atanmasıdır
- İki düğüm bir kenarla bağlanırsa, düğümler farklı renklerle renklendirilir.
- Grafik boyunca en fazla 5 renk var.
Bunu göz önüne alarak, size herhangi bir basit yönlendirilmemiş düzlemsel grafiği 5 renk için oldukça basit bir algoritma sunacağım. Bu algoritma aşağıdaki tanımları gerektirir
Erişilebilirlik : Düğüm 1 düğüm 2'den erişilebiliyorsa, bu, her biri bir sonrakine bir kenarla bağlanan bir dizi düğüm olduğu anlamına gelir, böylece ilk düğüm düğüm 2 ve son düğüm düğüm 1 olur. simetriktir, eğer düğüm 1 düğüm 2'den erişilebilirse, düğüm 2 düğüm 1'den erişilebilir.
Alt grafik: Belirli bir düğüm kümesi N'nin grafiğinin alt grafiği, alt grafiğin düğümlerinin tümü N cinsindendir ve yalnızca her iki düğüm de kenara bağlıysa, alt grafikte bulunan bir grafiktir. N'de.
Renk (N), 5 renkli N düğümlü düzlemsel grafikleri renklendirmek için bir işlev olsun. Aşağıdaki fonksiyonu tanımlıyoruz
- En az sayıda düğümün bağlı olduğu düğümü bulun. Bu düğümde en fazla 5 düğüm bulunur.
- Bu düğümü grafikten kaldırın.
- Renklendirmek için bu yeni grafikte Renk (N-1) çağırın.
- Silinen düğümü grafiğe geri ekleyin.
- Mümkünse, eklenen düğüme bağlı düğümlerinden hiçbirinin sahip olmadığı bir rengi renklendirin.
- Mümkünse, eklenen düğüme komşu 5 düğümün 5 farklı rengi vardır, bu nedenle aşağıdaki işlemi denemeliyiz.
- Eklenen n1 ... n5 düğümünü çevreleyen düğümleri numaralandırın
- Orijinal grafikteki tüm düğümlerin alt grafiğini n1 veya n3 ile aynı renkte düşünün.
- Bu alt paragrafta, n3'e n1'den erişilemiyorsa, n1'den (n1 dahil) erişilebilen düğümler kümesinde, n1 renginin tüm örneklerini n3'lerle değiştirin veya tersini yapın. Şimdi eklenen düğüm n1'in orijinal rengini renklendirin.
- Bu yeni grafikte n3'e n1'den erişilebiliyorsa, n1 ve n3 yerine n2 ve n4 düğümlerinde adım 9'daki işlemi yapın.
Meydan okuma
Bir edgelistin (bir grafiği temsil eden) bir girdisi verildiğinde, her düğüme bir değer atayarak grafiği renklendirin.
Girdi : Grafikteki kenarların listesi (ör. [('a','b'),('b','c')...]
)
Giriş edgelistinin (a, b) listede varsa, (b, a) listede DEĞİL olacak şekilde olacağını unutmayın.
Çıktı : Her çiftin ilk elemanının bir düğüm ve ikincisinin rengi, yani [('a',1),('b',2)...]
veya{'a':1,'b':2,...}
Rakamlardan karakterlere, başka herhangi bir şeye kadar renkleri temsil etmek için her şeyi kullanabilirsiniz.
Giriş ve çıkışların ne olduğu oldukça net olduğu sürece giriş ve çıkış oldukça esnektir.
kurallar
- Bu bir kod-golf mücadelesi
- Yukarıda tarif ettiğim algoritmayı kullanmanıza gerek yok. Sadece referans için orada.
- Herhangi bir grafik için, genellikle onları renklendirmek için birçok geçerli yöntem vardır. Algoritmanızın ürettiği renk geçerli olduğu sürece, bu kabul edilebilir.
- Grafiğin 5 renkli olması gerektiğini unutmayın.
Test Durumları
Renklendirme sonuçlarınızın geçerliliğini test etmek için aşağıdaki kodu kullanın . Grafik başına birçok geçerli grafik renklendirme olduğundan, bu algoritma renklendirmenin geçerliliğini kontrol eder. Kodu nasıl kullanacağınızı görmek için doktora bakın.
Bazı rastgele (ve daha aptalca) test vakaları :
Test Örneği 2: Krackhardt Uçurtma Grafiği
[(0, 1), (0, 2), (0, 3), (0, 5), (1, 3), (1, 4), (1, 6), (2, 3), (2, 5), (3, 4), (3, 5), (3, 6), (4, 6), (5, 6), (5, 7), (6, 7), (7, 8), (8, 9)]
Geçerli bir çıktı:
{0: 4, 1: 3, 2: 3, 3: 2, 4: 4, 5: 1, 6: 0, 7: 4, 8: 3, 9: 4}
Not : Bu test senaryoları, renklendirme algoritmasının daha incelikli davranışını test etmek için çok küçüktür, bu nedenle kendi grafiklerinizi oluşturmak muhtemelen işinizin geçerliliğinin iyi bir testidir.
Not 2 : Renklendirme çözümünüzü yakında çizecek başka bir kod parçası ekleyeceğim.
Not 3 : Sunulan rastgele renklendirme algoritmalarını görmedim, bu PPCG hakkında çok güzel olan şey! Bununla birlikte, daha belirleyici bir algoritma golf oynayabilirse, bu da çok havalı olurdu.
5
için 4
, ve tekrar göndermek.