Witam. Mam do napisania projekt z c++. Musze wygenerowac macierz 0/1. w moim przypadku przyjalem spacja i "x". macierz jest mapa po ktorej ma sie poruszac "robot". i znalezc w jakikolwiek sposob droge ze startu do mety. na poczatku tworze tablice statyczna, potem przeksztalcam ja w tablice wskaznikow. kazdemu wskanikowi rezerwuje miejsce i che zrobic graf ktory uzalezni kazde pole od siebie.
chodzi o to zeby od kazdego punktu robot wiedzial gdzie sie moze poruszyc. jezeli w lewo ma wolne pole to zeby wskaznik w lewo wskazywal na to pole. a jak ma przeszkode czyli X lub krawedz to zeby wskazywal NULL. program ktorego kod wysylam kompiluje sie ale nie dziala poprawnie. mysle ze moge sie myslic w funkcji rob_graf oraz szukaj_drogi oraz szukaj_drogi2. prosilbym o sprawdzenie tych dwoch funkcji pod wzgledem bledow logicznych itp. pozdrawiam

#include <cstdlib>
#include <iostream>
#include <time.h>
#include <conio.h>

using namespace std;
struct droga{
       string dane;
       droga *lewo;
       droga *prawo;
      droga *gora;
      droga *dol;
       };
const int a=4,b=4;



void losuj_mape (string tab[][b])
{int x;
     for (int i=0;i<a;i++)
{for (int j=0;j<b;j++)
{x=(rand()%3)%2;
if(x==1){
     tab[i][j]="X";}
     else tab[i][j]=" ";
     }
     }
     }
     void pokaz_mape(string tab[][b])
     {for (int k=0;k<a+2;k++) cout<<"* ";
     cout<<endl;
          for (int i=0;i<a;i++) 
{cout<<"* ";
          for (int j=0;j<b;j++)
{cout<<tab[i][j]<<" ";
     }
     cout<<"*"<<endl;
     }for (int p=0;p<a+2;p++) cout<<"* ";
     cout<<endl;
          }
          
      void losuj_pozycje( int &i, int &j, string T[][b], droga *A[][b])
          {int k,f;
                           do {i=rand()%a;
           j=rand( )%b;
            k=rand( )%a;
            f=rand( )%b;    
               }while(T[i][j]!=" " && T[k][f]!=" ");      
          T[i][j]="S";
          T[k][f]="M";
          A[i][j]->dane="S";
          A[k][f]->dane="M";
                               
                               }
          void rob_graf(string T[][b], droga *A[][b] )                     
{////////////////////////////////////////////
for (int i=0;i<a;i++)
{for (int j=0;j<b;j++)
{A[i][j]=new droga;
 (A[i][j])->dane=T[i][j];    
     }
    }
    ///////////////////////////////////////////////
for (int i=0;i<a;i++)
{for (int j=0;j<b-1;j++)

 {    if(A[i][j+1]->dane==" "){A[i][j]->prawo=A[i][j+1];}
 else {A[i][j]->prawo=NULL;}
     }
     A[i][b-1]->prawo=NULL;
    }
      
    //////////////////////////////////////
    for (int i=0;i<a;i++)
{for (int j=b-1;j>0;j--)

 {    if(A[i][j-1]->dane==" "){A[i][j]->lewo=A[i][j-1];}
 else {A[i][j]->lewo=NULL;}
     }
     A[i][0]->lewo=NULL;
    }    
//////////////////////////////////////////
for (int i=0;i<a-1;i++)
{ for (int j=0;j<b;j++)
{   if (A[i+1][j]->dane==" "){A[i][j]->dol=A[i+1][j];}
else {A[i][j]->dol=NULL;}
      A[a-1][j]->dol=NULL;
      }
      
    }
    /////////////////////////////////////////
for (int i=a-1;i>0;i--)
{for (int j=0;j<0;j++)

 {    if(A[i-1][j]->dane==" "){A[i][j]->gora=A[i-1][j];}
 else {A[i][j]->gora=NULL;}
     A[0][j]->gora=NULL;
     }
     
    
          }}                               
              
           
            
         void kasuj(droga *A[][b])
         {for (int i=0;i<a;i++)
      {for (int j=0;j<b;j++)
      {
          delete A[i][j];
       }
           }
              }   
              
               
     
     
                
         void pokaz_mape2(droga *tab[][b])
     {for (int k=0;k<a+2;k++) cout<<"* ";
     cout<<endl;
          for (int i=0;i<a;i++) 
{cout<<"* ";
          for (int j=0;j<b;j++)
{cout<<tab[i][j]->dane<<" ";
     }
     cout<<"*"<<endl;
     }for (int p=0;p<a+2;p++) cout<<"* ";
     cout<<endl;
          }
          
     void szukaj_drogi(droga *&wsk)  // algorytm szukania drogi wedlug mnie jest sensowny
     {  bool z=false;                             // algorytm polega na tym iz losuje liczbe <0,3>
     // do kazdej strony jest przypisana liczba i wtedy program po omacku bada losowo wybrana strone
     
         
         while (z!=true){
               int x=rand()%4;
               z=false;
          if (x==0){
       if(wsk->lewo==NULL || wsk->lewo->dane=="S") {szukaj_drogi(wsk);}             
          else if(wsk->lewo->dane=="M"){getch(); z=true;}
          
          else {wsk=wsk->lewo; wsk->dane=".";}
}          
       if (x==1){
       if(wsk->prawo==NULL || wsk->prawo->dane=="S") {szukaj_drogi(wsk);}
       else if(wsk->prawo->dane=="M"){getch(); z=true;}       
          else {wsk=wsk->prawo; wsk->dane=".";}
}         
       if (x==2){
      if(wsk->gora==NULL || wsk->gora->dane=="S") {szukaj_drogi(wsk);}
       else if(wsk->gora->dane=="M"){getch(); z=true;}   
          else {wsk=wsk->gora; wsk->dane=".";}
}                
         if (x==3){
       if(wsk->dol==NULL || wsk->dol->dane=="S") {szukaj_drogi(wsk);}
       else if(wsk->dol->dane=="M"){getch(); z=true;}     
          else {wsk=wsk->dol; wsk->dane=".";}
}         
       
          
          }
         
         if (z==true){cout<<endl<<"grejt"<<endl;} }
     
       void szukaj_drogi2(droga *&wsk){
int x; bool z=false;
while(z!=true){
x=rand()%4;
z=false;
cout<<x;
getch();
switch (x)
{
       case 0: {
              if(wsk->lewo==NULL || wsk->lewo->dane=="S") {szukaj_drogi2(wsk);}             
          else if(wsk->lewo->dane=="M"){z=true;}
          
          else {wsk=wsk->lewo; wsk->dane=".";}
            } break;
       
       case 1: {
            if(wsk->prawo==NULL || wsk->prawo->dane=="S") {szukaj_drogi2(wsk);}
       else if(wsk->prawo->dane=="M"){z=true;}       
          else {wsk=wsk->prawo; wsk->dane=".";}
}         
            break;
       
       case 2: {
            if(wsk->gora==NULL || wsk->gora->dane=="S") {szukaj_drogi2(wsk);}
       else if(wsk->gora->dane=="M"){z=true;}   
          else {wsk=wsk->gora; wsk->dane=".";}
          } break;
       
       case 3: {
            if(wsk->dol==NULL || wsk->dol->dane=="S") {szukaj_drogi2(wsk);}
       else if(wsk->dol->dane=="M"){z=true;}     
          else {wsk=wsk->dol; wsk->dane=".";}
            } break;
       
       }
       }
     if (z==true) {cout<<endl<<"grejt"<<endl;}  }            
int main(int argc, char *argv[])
{
string T[a][b];

int i, j;

losuj_mape(T);
              pokaz_mape(T);
              
              droga *A[a][b];
rob_graf(T,A);
              losuj_pozycje(i,j,T,A);
cout<<endl;
           pokaz_mape(T);
droga *wsk;
wsk=A[i][j];
cout<<A[3][2]->dane<<" "<<A[2][1]->gora->dol->dane;
pokaz_mape2(A);
cout<<wsk->prawo->prawo->dane;


 // zadzialalo dopiero gdy zmniejszylem rozmiar macierzy do 3x3, ale nie zawsze 
//chce to dzialac. program sie wlacza i od razy wylacza

 // czasem usuwajac ta funkcje program sie wykonuje, jezeli jest ona to prkatycznie
// ciagle program sie otweira i od razu zamyka 


    system("PAUSE");
    return EXIT_SUCCESS;
}