Ich habe einen Weg gesucht die Länder auf einer Landkarte mit 4 Farben einzufärben, ohne das ein Nachbarland dieselbe Farbe hat. Das scheint jetzt zu klappen, allerdings bin ich beim testen auf etwas merkwürdig gestossen(Zeile 54).
Ich rufe eine (mittlerweile unnötige)Procedure auf die einen Parameter verlangt, diesen Parameter zu übergeben hatte ich vergessen, aber es kommt keine Fehlermeldung.
Frage: Wieso nicht?
Die fragliche Zeile ist: if Rest == 0: return
Die Procedure: def Rest(L):
Code: Alles auswählen
import copy,sys
Farben = range(1,5) # 4 Farben, 1..4, 0=noch ohne Farbe
AnzahlLaender = 14 # zum testen
Laender = []
for i in range(AnzahlLaender):
Laender.append([0,[]]) # [0]=Farbe [1]=Nachbarlaender
""" 0=Island 1=Irland 2 = GB 3=Norwegen 4=Schweden
5=Finnland 6=Daenemark 7=Deutschland 8=Niederlande
9=Luxemburg 10=Belgien 11= Frankreich 12= Spanien 13= Schweiz """
# Nachbarlaender, zumindest farblich
Laender[0][1] = [1,2,3]
Laender[1][1] = [0,2]
Laender[2][1] = [0,1,3,11,8,10]
Laender[3][1] = [4,0,2,6]
Laender[4][1] = [3,5,6]
Laender[5][1] = [4]
Laender[6][1] = [3,4,7]
Laender[7][1] = [6,10,13,11,9,8]
Laender[8][1] = [1,7,10,9]
Laender[9][1] = [7,8,10,11]
Laender[10][1] = [7,8,9,11]
Laender[11][1] = [10,12,7,13,9]
Laender[12][1] = [11]
Laender[13][1] = [7,11]
# alle Laender haben [ungleiche] Farbe
def Bingo(L):
for i in range(len(L)):
if L[i][0] == 0: return False
for i in range(AnzahlLaender):
print i,'=',L[i][0]
sys.exit()
# Farbe der Nachbarlaender checken
def FarbeOK(L,LandNr,Farbe):
for i in L[LandNr][1]:
if L[i][0] == Farbe: return False
return True
# Anzahl Laender ohne Farbe
def Rest(L):
r = 0
for i in range(len(L)):
if L[i][0] == 0: r = r + 1
return r
# rekursive Suche
def Faerben(L):
Bingo(L) # Check ob Weg gefunden
if Rest == 0: return # Irrweg
for LandX in range(AnzahlLaender):
if L[LandX][0] == 0:
for Farbe in Farben:
if FarbeOK(L,LandX,Farbe):
L2 = copy.deepcopy(L)
L2[LandX][0] = Farbe
Faerben(L2)
# Jedes Land wird als Anfang getestet
for LandX in range(AnzahlLaender):
for Farbe in Farben:
L = copy.deepcopy(Laender)
L[LandX][0] = Farbe
Faerben(L)
Danke für einen Hinweis...