Eulertour, eine Städtereise

Image Screenshot_20240827_131717

lst_str = ["Wuerzburg", "Berlin", "Hamburg"]

adj_lst_str = [["Berlin","Hamburg"],["Hamburg","Wuerzburg"],["Wuerzburg","Berlin"]]


adj_lst = [];

i = 0
while i < len (adj_lst_str):
    j = 0
    tmp = []
    while j < len (adj_lst_str [i]):
        x = lst_str.index(adj_lst_str[i][j]) + 1
        tmp.append (x)
        j = j + 1
    adj_lst.append (tmp)
    i = i + 1


# also, ich habe jetzt erst mal diesen Eulergraphen von mir genommen und in eine Adjanzenzliste fuer Python 3 umgewandelt. Der Nachteil. Python faengt bei 0 an zu zaehlen, bei den Knoten V Vertices habe ich bei 1 angefangen. Das loese ich mit Python, ich erzeuge eine Kopie der Liste und subtrahiere in der Kopie von jedem Zustand, die Zahl 1.

# Mit len fuer jede Liste in der Liste ist das kein Problem auch, wenn die Listen innerhalb unterschiedliche Laengen haben, 2, 4, und 6

# Nachher wird der Algorithmus einfach so aussehen, angefangen bei einem Zustand gehe ich immer weiter, immer weiter bis ich am Ausgangsknoten angekommen bin, dabei entferne ich, das in Python eben ganz einfach moeglich, sowohl u und v einer Kante (u,v) und zwar das v bei u und das u bei v. Nichts ist in Python einfacher als das. Da es ein Eulergraph ist, muss ich wohl oder uebel irgendwann wieder am Ausgangsknoten ankommen, was vollkommen legitim ist, auch mit nur einem Kreis habe ich mein Ziel erreicht, habe ich allerdings - bzw. mein Programm so gewaehlt, dass ich nicht die ganze List leer habe, wenn ich wieder da bin, dann sehe ich die Liste ist nicht leer und beginne diese Ebenso zu bearbeiten

# im letzten Schritt, kopiere ich alle Listen der Reihe nach ineinander an die entsprechenden Knoten, was in Python kein Problem ist

# und im allerletzten Schritt, mache ich aus dieser Schachtelung von Listen eine einzige

import copy

a = copy.deepcopy (adj_lst)

print (adj_lst)
print (a)

i = 0

while i < len (a):
    j = 0
    while j < len (a[i]):
        a [i][j] = a [i][j] - 1
        j = j + 1
    i = i + 1

print (a)


flag = False

start_v = []
circles = []
while flag == False:
    euler = []
    v0 = 0
    while (v0 < len (a)) and not a[v0]:
        v0 = v0 + 1
    if v0 < len (a):
        start_v.append (v0)
        v = v0
        u = a [v][0]

        euler.append (v)
        start_v = []
        while u != v0:
            print (u)
            euler.append (u)
            a [u].remove (v)
            a [v].remove (u)
            v = u
            u = a [u][0]
        a [u].remove (v)
        a [v].remove (u)
        euler.append (u)
        print (euler)
        print (a)
        circles.append (euler)
    else:
        flag = True

print ("----")
print (start_v)
print (circles)


# test

b = [1,2,3,[4,5,6],7,8,9]

if type (b) == list:
    print ("yeah!")
if type (b [0]) == list:
    print ("yeah!")
else:
    print ("no!")

def merge (b):
    i = 0
    while i < len (b):
        #print (b [i])
        if type (b [i]) == list:
            if len (b [i]) > 0:
                b [i].reverse ()
                x = b[i].pop ()
                b [i].reverse ()
                b.insert (i,x)
            # b [i] = x
        i = i + 1
    b.remove ([])
    return b

merge (b)
print (b)

print (circles)

j = 0

while j < len (circles [0]):
    i = 1
    while i < len (circles):
        if circles [0][j] == circles [i][0]:
            circles [0][j] = circles [i]
            merge (circles [0])
            circles.remove (circles [i])
        i = i + 1
    j = j + 1




print (circles)

eulertour = copy.deepcopy (circles[0])

i = 0

while i < len (eulertour):
    eulertour [i] = eulertour [i] + 1
    i = i + 1

print (eulertour)




i = 0
while i < len (eulertour):
    print (lst_str [eulertour [i]-1])
    i = i + 1

[[2, 3], [3, 1], [1, 2]]
[[2, 3], [3, 1], [1, 2]]
[[1, 2], [2, 0], [0, 1]]
1
2
[0, 1, 2, 0]
[[], [], []]
----
[]
[[0, 1, 2, 0]]
yeah!
no!
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[[0, 1, 2, 0]]
[[0, 1, 2, 0]]
[1, 2, 3, 1]
Wuerzburg
Berlin
Hamburg
Wuerzburg

Image 24-08-27_12-24-52_2375