Giriş
Bu zorlukta göreviniz, verilen iki ağacın izomorfik olup olmadığına karar veren bir program yazmaktır. Bir ağaç, her düğümün, hiçbiri olmayan kök hariç, tam olarak bir çıkış kenarına sahip olduğu, yönlendirilmiş bir asiklik grafik anlamına gelir. İki ağaç, biri düğümleri yeniden adlandırarak biri diğerine dönüştürülebilirse izomorfiktir. Örneğin, iki ağaç (her kenarın işaret ettiği yer)
0 0
/|\ /|\
1 3 4 1 2 5
|\ /|
2 5 3 4
kolayca izomorfik olduğu görülmektedir.
Bir ağacı L
negatif olmayan tam sayıların bir listesi olarak aşağıdaki şekilde kodladık . Ağacın kökü etiketli 0
ve ayrıca düğümleri var 1,2,...,length(L)
. Her düğümün (1 tabanlı bir dizin oluşturma kullanarak) i > 0
için bir çıkış kenarı vardır L[i]
. Örneğin, liste (elementlerin altında verilen endekslerle)
[0,0,1,3,2,2,5,0]
1 2 3 4 5 6 7 8
ağacı kodlar
0
/|\
1 2 8
| |\
3 5 6
| |
4 7
Giriş
Girişleriniz, yerel formatta veya dilinizde verilen iki negatif olmayan tamsayı listesidir. İki ağacı yukarıda belirtilen şekilde kodlarlar. Onlar hakkında aşağıdaki koşulları kabul edebilirsiniz:
- Boş değiller.
- Aynı uzunluktalar.
- Her liste , tüm (1 tabanlı) endeksleri
L
karşılar .L[i] < i
i
Çıktı
Ağaçlarınız izomorfik ise çıktınız eski bir değer, değilse de sahte bir değer olacaktır.
Kurallar ve puanlama
Tam bir program veya bir fonksiyon yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklar izin verilmez. Zaman kısıtlaması yoktur, ancak ağaç veya grafik izomorfizmine karar veren yerleşiklere izin verilmez.
Test durumları
Truthy örnekleri
[0] [0]
[0,1,2,1] [0,1,1,3]
[0,1,1,3,3] [0,1,2,2,1]
[0,1,0,1,2,3,3,0] [0,0,2,1,0,4,2,1]
[0,1,2,3,1,2,3,0,8] [0,1,0,3,3,4,4,7,7]
Sahte örnekler
[0,0] [0,1]
[0,1,2,0,3,3,4] [0,1,2,3,0,4,3]
[0,1,0,1,2,3,3,0] [0,0,2,1,0,5,2,1]
[0,1,1,0,1,3,2,1,5] [0,1,0,3,3,3,2,5,2]
[0,1,2,3,1,2,3,0,8] [0,1,0,1,4,4,5,6,6]
[0,1,0,2,0,3,0,4,0,5] [0,0,2,1,0,3,4,0,0,9]