Labyrinth-Programmierung (rekursivefunktion)
-
Hallo Jungs ich habe ein großes Problem. ich muss zwar ein Labyrinth mit "C" programmieren aber ich komme nicht ganz recht. Ich brauche bitte Ihre hilfe. Hier folgt die Aufgabe.
// Aufgabe:
Implementieren Sie in C ein rekursives Backtracking-Verfahren, das zu einem
gegebenen Labyrinth den Weg vom Startpunkt zum Ziel findet.
Ihr Algorithmus soll seine Eingangsdaten aus einer Datei einlesen, deren Namen
vom Benutzer eingeben wird. Die Anzahl der Zeilen und Spalten soll maximal
50 x 50 sein. Start ist immer an der Position (0,0), das Ziel ist immer bei
(Spaltenanzahl - 1, Zeilenanzahl - 1).
Um die Definition des Labyrinthes so komfortabel und einfach für den Benutzer
wie möglich zu machen, soll diese formatfrei erfolgen. D.h. es werden in
ausreichender Zahl 0 und 1 angegeben, die durch bel. viele Leerzeichen
(mindestens jedoch 1) und Zeilenumbrüche angegeben werden.
0 im Feld(i,j) bedeutet, dass dieses Feld frei ist und in einem möglichen
Lösungsweg genutzt werden kann,
1 im Feld(i,j) bedeutet Hindernis und kann nicht überwunden werden.
Beim Einlesen können Sie davon ausgehen, dass in der Datei ein fehlerfreies
Labyrinth mit entsprechender Zeilen- und Spaltenanzahl gespeichert wurde.
Eine Datei könnte beispielsweise folgende Daten beinhalten:
8 8
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 0 0 0 0 1 1 1
0 1 1 0 1 1 1 1
0 1 0 0 0 0 1 1
0 1 0 1 1 0 1 1
0 1 1 1 1 0 0 1
0 1 0 1 1 1 0 0
Beachten Sie das es auch Labyrinthe ohne Ausgang und welche mit Zyklen
geben kann.ich warte gern auf die Rückmeldung.
MfG.
-
Und warum postest du dann in "C# und .NET"?
-
Was hast du denn schon gemacht? Wobei hast du ein Problem, bei dem man dir weiterhelfen kann? Die Aufgabe an sich ist schon Millionen male gelöst worden (z.B. Hier und DAS Beispiel für Rekursion (Naja, die Berechnung der Fakultät ist DAS Beispiel)).
-
ich habe es angefangen aber ich bin nicht sicher, ob es richtig ist oder falsch ist. Hier ist Mein Programm.
//Code
#include <stdio.h>
#define N 50
#define FREI 0void init(int labi[N][N]);
void ausgabe(int labi[N][N],int dimI,int dimJ);
void setzen(int labi[N][N],int dimI,int dimJ,int posI,int posJ);
int wegSuchen(int labi[N][N],int posI,int posJ);int wegSuchen(int labi[N][N],int posI,int posJ)
{
int i,j;if(labi[N-1][N-1]==0) //Ziel erreicht.
printf("Erfolgt");
// Starpunkt
if(labi[posI][posJ]==2 || labi[posI][posJ]==1)
return 0;
// nach oben gehen
if(labi[i][j-1])
return 1;
// nach unten gehenif(labi[i][j+1])
return 1;
// nach recht
if (labi[i+1][j])
return 1;
// nach links
if(labi[i-1][j])
return 1;
//rekursive Aufruf
if(labi[posI][posJ]==0)
return 1;
else
//labi[posI][posJ]=1;return 0; //weg gesperrt
return 0;
}void init(int labi[N][N])
{
int i,j;
for(i=0; i<N; i++)
for(j=0; j<N; j++ )
labi[i][j]=FREI;}
-
Ok und wo scheitert es jettzt? warst mal am debuggen? Bist es step-by-step druch gegangen?
-
Wer ist denn so mutig, sich einen komplett unformatierten code durchzulesen?
Und dann noch sowas:
else //labi[posI][posJ]=1; return 0; //weg gesperrt
So wird das nix, mein Lieber. Du gehörst //weg gesperrt.