Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.07.2013, 18:12

Anzahl der möglichen maximalen Wege bestimmen

Vorweg, ich möchte keine Lösung haben, nur einen Ansatz, da ich leider keinen finde :rolleyes:

Ich muss für die Uni einen Algorithmus schreiben der die Anzahl der Möglichkeiten für folgendes Szenario berechnet:
  • Ein Spielfeld, gegeben durch eine m*n-Matrix
  • Es existiert innerhalb der Matrix ein Startpunkt(S) und ein Zielpunkt(T)
  • Zusätzlich existieren "Wände" markiert durch X
  • Gesucht sind alle Möglichkeiten für den Weg von S zu T
  • Es darf sich nur nach oben, unten, links oder rechts bewegt werden (NICHT diagonal)
  • Es muss jedes (freie) Feld genau einmal besucht werden
Beispiel
m = 3
n = 4
S = (0, 2)
T = (2, 0)
Mit einer Wand:
..TX
....
S...
Wie bereits erwähnt such ich einen Ansatz, der mir hilft diesen Algorithmus zu bestimmen.

mfg Mirac
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

wluc-16

Treue Seele

Beiträge: 212

Wohnort: in der Nähe von Bielefeld :D

Beruf: Schüler

  • Private Nachricht senden

2

08.07.2013, 18:53

Mit dem hier kannst du den kürzesten Weg bestimmen.
Ist auf jeden Fall einen Blick wert.

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

3

08.07.2013, 18:58


Es muss jedes (freie) Feld genau einmal besucht werden

Geht das wirklich mit A*?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »patrick246« (08.07.2013, 19:07)


wluc-16

Treue Seele

Beiträge: 212

Wohnort: in der Nähe von Bielefeld :D

Beruf: Schüler

  • Private Nachricht senden

4

08.07.2013, 18:59

Ne, aber es ist ja ein Ansatz, überhaupt einen Weg zu finden :D

5

08.07.2013, 19:06

Hatte ich auch schonmal dran gedacht :D
Wusste aber nicht genau wie ich ihn übertragen kann :rolleyes:
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

6

08.07.2013, 19:14

Na, wenn's mit A* sein soll, könntest du ja einfach jedem Tile ein bool geben, ob es bereits besucht wurde / ob es bereits als Teil eines Weges benutzt wurde. Wenn ja behandelst du es genau wie jedes nicht begehbare Tile. Dann lässt du noch eine Schleife laufen, bis der A* irgendwann klemmt, weil er nicht zum Ziel kommt und schon hast du eine Liste aller möglichen Wege. Und diese auch noch automatisch nach deren Kürze geordnet.
Könnte aber natürlich sein, dass du somit nicht alle Tiles besuchst, das weiß ich jetzt nicht. Ausprobieren. ;)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

7

08.07.2013, 19:20

Es sollen halt nur Wege gezählt werden, die ALLE freien Felder besuchen und auch alle Möglichkeiten sollen berücksichtigt werden. Einen einzelnen Weg der alle Felder besucht zu finden ist kein Problem, allerdigns weiß ich nicht wie ich alle verschiedenen Kombinationen rausfinde
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

Sp3iky

Treue Seele

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

8

08.07.2013, 19:41

Spontan würde ich einfach alle Möglichkeiten durchprobieren. Du beginnst beim Startknoten und erstellst für jede abgehende Kante, eine Knotenliste. Für Jeden weiteren Knoten betrachtest du wieder die abgehenden Kanten und erstellt für jede weitere Kante wieder eine Knotenliste, in denen alle Vorgänger des aktuellen Knotens enthalten sind. Das machst du natürlich nur, wenn in der entsprechenden Knotenliste der Zielknoten der Kante noch nicht enthalten ist, ansonsten wird die Kante ignoriert.

Am Ende hast du eine Liste von Pfaden durch den Graphen. Jetzt musst du nur noch die Pfade heraussuchen, deren Knotenanzahl gleich der Anzahl der Knoten im Graphen ist und die als letzten Knoten den Endpunkt enthalten.

Ist vielleicht nicht der beste Algo, sollte aber zum Ziel führen.

9

08.07.2013, 19:42

Du könntest einen Baum aufbauen in dem alle möglichen Felder von einem Feld aus jeweils neue Zweige bilden. Am Ende kannst du dann alle Wege rausfiltern die alle Felder besucht haben. Keine Ahnung ob das effektiv funktioniert.

10

08.07.2013, 19:52

Sind auf jedenfall brauchbare Ansätze, danke :)

Gibt zwei Versionen als Abgabe einmal funktionieren und einmal zusätzlich auf Geschwindigkeit als Wettbewerb, die lass ich wohl lieber :D

Also ich würde jetzt einen Baum mit jeweils 4 Folge-Knoten erstellen, und dann S als Root-Knoten verwenden und alle Kombinationen durchprobieren und hinterher filtern welche bei T ankommen und von der Länge n*m - 2 * (Anzahl der X) sind. ist das in etwa was ihr meint?
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

Werbeanzeige