Wavefront Algorithmus



  • Sehr geehrte Progarmmierergemeinde,

    wir sind hier eine Arbeitsgruppe von 2 Leuten und Versuchen den Wavefrontalgorithmus zum laufen zu bringen.
    Wavefrintalgorithmus: Für die jenigen, die den nicht kennen: Baut eine Karte und geht an einen Punkt der Karte. In dieser sind Felder, die nicht betreten werden dürfen. Dieser soll den kürzesten Weg von einem Punkt zum anderen finden. Das funktioniert mit der Wavefront. Man geht praktisch von einem Punkt aus und zählt die Schritte bis zum Ziel.

    Den ersten Schritt haben wir. Nun möchten wir dem Algorithmus sagen, dass bei einem der Quadranten weiter machen soll, in dem ne 2 steht. usw...
    das also in eine Schleife packen und so lange machen, bis er am Start ist (wir gehen vom Ziel zum Start).
    Wir wären euch sehr dankbar, wenn ihr uns helfen könntet.

    Gruß

    #include <stdio.h>
    #include <stdlib.h>
    
     //TESTAT: Wavefront-Algorithmus
    
     /* --------Variablen-------- */
    int goal=1;       //Ziel
    int space=0;      //Freie Felder 
    int wall=255;     //Hindernis
    int start=21;      //Start
    int i=1;
    
    //Koordinaten
    int start_x=0;
    int start_y=1;
    int goal_x=1;
    int goal_y=4;
    int x=0;
    int y=0;
    int current_x=0;
    int current_y=0;
    int temp_x=0;
    int temp_y=0;
    
    //Matrix (falls geändert wird, muss auch bei wavefront Änderungen vorgenommen werden)
    int map[4][5]= {
            {255,0,255,0,255},
    		{255,0,255,0,0},
    		{0,0,255,0,0},
    		{255,0,0,0,255}};
    
    void print_map(void);
    
    int main(int argc, char *argv[]) //main-Funktion
      {
    
    	map[goal_x][goal_y]=goal;      //Ziel definieren
    	map[start_x][start_y]=start;   //Start definieren
    	printf("Adding Start and Goal:\n");
        print_map();
    
    //Variablen
    
    current_x=goal_x;
    current_y=goal_y;
    map[current_x][current_y]=i;
    
    //if (map[current_x][current_y]==start){
    //    printf("\nStart erreicht.\n");} //Start erreicht
    
    //Bewegung
    //while(map[current_x][current_y]!=start){
    
     if (map[current_x][current_y]==start)
       { }
      else //unten
     { if (map[current_x+1][current_y]==0)
     { map[current_x+1][current_y]=i+1;}  
    
        //oben
      if (map[current_x-1][current_y]==0)
      { map[current_x-1][current_y]=i+1;}  
    
        //rechts
        if (map[current_x][current_y+1]==0)
        {map[current_x][current_y+1]=i+1;}
    
        //links
        if (map[current_x][current_y-1]==0)
        {map[current_x][current_y-1]=i+1;}}
    
        print_map();
    
        system("PAUSE"); 
        return 0; 
          }
    
    void print_map(void) //Karte ausgeben
    {
    
    	for (x=0;x<4; x++)
    		{
    		for (y=0;y<5;y++)
    			{
                if (map[x][y]==255)
                   printf("X ");
                else if (map[x][y]==21)
                   printf("S ");
                else if (map[x][y]==1)
                   printf("G ");
    			else
                   printf("%d ",map[x][y]);	      
    			}
    		printf("\n");
    		}
    	printf("\n");
    	}
    


  • Ich solltet euch besser koordinieren, eine andere 2-Gruppe war schneller:

    http://www.c-plusplus.net/forum/278833

    Mal sehen, wann hier die nächste Zweiergruppe aufschlägt, wieviele seid ihr in der Gruppe denn insgesamt?



  • Wutz schrieb:

    Ich solltet euch besser koordinieren, eine andere 2-Gruppe war schneller:

    http://www.c-plusplus.net/forum/278833

    Mal sehen, wann hier die nächste Zweiergruppe aufschlägt, wieviele seid ihr in der Gruppe denn insgesamt?

    danke dir für den link, ich habe jetzt noch etwas zeit und werde es langsam angehen...
    versuche es selbst zu lösen, evt tauchen dann andere fragen auf.
    Gruß



  • naja finde den code von wutz bissel zu kompliziert für die aufgabenstellung, ich raff da ned viel 🙂

    viele dinge hat der prof ned mal in der vorlesung angeschnitten, die du benutzt...

    jmd vlt ne idee für ne einfachere lösung


Anmelden zum Antworten