Komischer Fehler!!!
-
Hallo... und zwar hab ich ein Problem...Keine Ahnung an was es liegt.
Hier der Quellcode:#include <stdio.h> #include <windows.h> #include <time.h> #include <math.h> //binde Bibs ein int locate(a,b) //Diese FUnktion setz den Cursor an y und x des Screens { HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD xy; xy.Y = a; xy.X = b; SetConsoleCursorPosition(stdOut,xy); return 0; } int richtung(int ry[9],int rx[9]) // Gibt die Koordinaten zur untersuchung an { ry[1]=-1;ry[2]=0;ry[3]=0;ry[4]=1;ry[5]=-1;ry[6]=-1;ry[7]=1;ry[8]=1; rx[1]=0;rx[2]=1;rx[3]=-1;rx[4]=0;rx[5]=-1;rx[6]=1;rx[7]=-1;rx[8]=1; return 0; } int main() { int ol[25][80] = {0}; //Offene Liste int gl[25][80] = {0}; //geschlossene Liste int y,x; int ry[9] = {0}; int rx[9] = {0};richtung(ry,rx); //Initialisiere Richtung int g[25][80] = {0}; //Liste für die Entfernugn der einzelnen felder int ay,ax; int ky,kx; int fy,fx; int klein=0; int i; sy = 12; sx = 10; gl[sy][sx]=1; //füge STartkoordinaten der Geschlossenen Liste hinzu. ky=sy;kx=sx; //setze Startknoten als Aktuellen knoten while(!0) { for(i=1;i<9;i++) { /* Suche nach den Acht feldern um den Aktuellen Knoten, ob diese frei sind und den anderen Kriterien entsprechen*/ fy = ky + ry[i]; fx = kx + rx[i]; if(ol[fy][fx]!=1&&gl[fy][fx]!=1&&fy>0&&fx>0&&fx<79&&fy<24) { g[fy][fx] = sqrt((pow((fx-sx),2)+(pow((fy-sy),2)))); //Falls frei, berechne die Entfernung zum Startknoten ol[fy][fx]=1; //Falls frei, füge den Knoten der OL hinzu } } for(y=0;y<24;y++) { for(x=0;x<80;x++) { if(ol[y][x]==1&&gl[y][x]!=1) {locate(y,x);printf("1");} } } klein=0; //Die Nächsten Schleifen suchen den kleinsten Wert aus g for(y=1;y<24;y++) { for(x=1;x<79;x++) { if(g[y][x]!=0) { if(klein==0) {klein=g[y][x];} if(g[y][x]<=klein&&gl[y][x]!=1) { klein = g[y][x]; ay=y;ax=x; } } } } ky=ay;kx=ax; //Setze Aktuelleb Knoten auf den Kleinstgefundenen ol[ay][ax]=0; // lösche Aktuellen Knoten aus offener Liste gl[ay][ax]=1; // FÜge aktuellen knoten der Gesclossenen liste hinzu } return 0; }
Info:
Der Startknoten (sy,sx) wird der geschlossenen liste(gl) hinzugefügt.
Der Aktuelle Knoten ist der Startknoten.
1: Aktueller Knoten wird auf seine 8 umliegenden felder überprüft, ob es frei ist und sich nicht in der Geschlossenen Liste befindet (gl), sowie innherhalb der Karte (bildschirm) ist,aber es darf auch nicht in der Offenen liste (ol) sein. Falls frei ist, füge die Knoten der Offenen Liste (ol) hinzu und berechne die entfernung g des knotens zum Startknoten.
Suche den kleinsten g werd raus und füge ihn gl hinzu, dann lösche g aus ol.
Starte wieder von Punkt 1.So..das ist DieKurzbeschreibung,w as das Programm machen soll.
Kann mir jemand helfen und meine Frage beantworten?
Warum hängt er sich auf, sobald er den Punkt an position 1,1 untersucht???Gruß CG
-
lalala....endlich, nach 2 Stunden fummelzeit, hab ich den fehler gefunden^^
Sry, ich weis das DP verboten ist, aber jetzt braucht ihr nicht mehr antworten...
Der fehler lag bei der kleinsten suche von g.
Er soll ja nicht da suchen wo g nicht 0 ist sondern wo ol nicht 1 ist....
-
CaPGeti schrieb:
Sry, ich weis das DP verboten ist, aber jetzt braucht ihr nicht mehr antworten...
es gibt doch die edit funktion. quellcode gewusel weglöschen, edit:erledigt drunter -> feddisch