Python :: Aufgabe #73 :: Lösung #2

2 Lösungen Lösungen öffentlich
#73

Das ist das Haus vom Nikolaus

Anfänger - Python von eulerscheZhl - 12.03.2015 um 10:20 Uhr
Schreibe ein Programm, das alle Lösungen des Haus vom Nikolaus findet.
#2
vote_ok
von AlexGroeg (2010 Punkte) - 10.02.2020 um 20:15 Uhr
Quellcode ausblenden Python-Code
## nikohaus.py 
## Programm setzt das "Haus-des-Nikolaus"-Problem algorithmisch mit
## einer Adjazenzmatrix um und gibt die Möglichkeiten aus, wieviel mal 
## das Haus von jeder seiner Ecken ausgehend aufgebaut werden kann.


def haus_rek(mtrx, start, kn, count, weg):
        
        ''' Berechnen und Ausgabe der Moeglichkeiten '''
        
        for i in range(5):                                              # eine Matrix-Zeile durchgehen
                if mtrx[kn][i] == 1:                                    # wenn mit anderer Zeile verbunden...
                        weg_neu = "{0} -> {1}".format(weg,i)
                        #print(weg_neu)
                        if count == 7:                                  # Haus komplett errichtet
                                zaehl[start] +=1                        # Moeglichkeiten hochzaehlen
                                if start == 0:
                                        print("{0}: {1}".format(zaehl[start], weg_neu))
                                        continue
                                return
                        mtrx[kn][i] = 0; mtrx[i][kn] = 0                # diese Wege streichen
                        haus_rek(mtrx, start, i, count +1, weg_neu)     # naechster Knoten
                        mtrx[kn][i] = 1; mtrx[i][kn] = 1                # Wege wieder herstellen
        
        zaehl[start +5] +=1                                             # Nicht-Moeglichkeiten hochzaehlen



##--- main() ------------------------------------------------------------

# Adjazenzmatrix des "Haus' vom Nikolaus"
#         4                                                              
#        / \
#       2 - 3
#       | X |
#       0 - 1

mtrx = [[0,1,1,1,0],                      
        [1,0,1,1,0], 
        [1,1,0,1,1], 
        [1,1,1,0,1],
        [0,0,1,1,0]]


zaehl= [0] *10                                                          # speichert die Konstruktionsmöglichkeiten ab


print("Konstruktionsmoeglichkeiten vom Knoten 0 aus:\n")
for i in range(5):                                                      # alle Knoten einmal als Anfangsknoten
        weg = "{0}".format(i)
        haus_rek(mtrx, i, i, 0, weg)                                    # mtrx, start, kn, count, weg


for i in range(5): 
        print("\n-> Von Knoten {0} aus gibt es {1} Moeglichkeiten, {2} Sackgassen.".format(i, zaehl[i], zaehl[i +5]))

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben