Poruszanie się w labiryncie

Poruszanie się w labiryncie
  • Rejestracja: dni
  • Ostatnio: dni
0

Dana jest tablica zawierająca wyłącznie same zera i jedynki.

http://pan.ids.gda.pl/progman/zadimg/00146a.png
Określamy współrzędne położenie dwóch punktów A i B, gdzie punkt A jest punktem początkowym, a punkt B punktem końcowym drogi.

W powyższym przykładzie punkt A ma współrzędne (2,2), a punkt B = (5,4).

Następnie określamy, czy możemy przejść z punktu A do B. Aby było możliwe przejście z punktu A do punktu B musi istnieć pomiędzy tymi punktami droga złożona z ciągu jedynek. Poruszamy się w prawo bądź w dół.

Jak widać na załączonym obrazku, z punktu A do punktu B istnieje droga.

SP
  • Rejestracja: dni
  • Ostatnio: dni
3

Aha.

  • Rejestracja: dni
  • Ostatnio: dni
0

Chodzi mi o pomysł. Jak do tego się zabrać.

SP
  • Rejestracja: dni
  • Ostatnio: dni
1

Skoro można iść tylko w prawo i dół to sprawdzaj najpierw czy możesz zejść o jedną kratkę w dół, jeśli tak to schodź, jeśli nie to idź w prawo o jedną kratkę. Następnie znów sprawdź czy możesz w dół itd. Jeśli punkt końcowy będzie na lewo od aktualnej pozycji oznacza, że nie ma drogi, tak samo gdy nie będziesz mógł zejść niżej i przesunąć się w prawo.

  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki zaraz zacznę robić program.

Nie działa mi w codeblock'u losowanie. Jakiś pomysł? Dałem biblioteki
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <cstdlib>

SP
  • Rejestracja: dni
  • Ostatnio: dni
0

Co znaczy nie działa?

Zellus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 474
0

Co to znaczy nie działa? Podaj komunikat błędu, kawałek kodu który nie działa, bez tego nic nie zrobimy...

  • Rejestracja: dni
  • Ostatnio: dni
0

Nie losuje nic nie wyświetla, a po wyłączeniu programu zostaje w on włączony w tle (widać proces).

Kopiuj
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main ()
{
    int t[6][5],l;
    srand(time(NULL));
for (int i=1;i<=6;i++)
{
    for (int j=1;j<=5;j++)
        {
    {
        l=(int)rand()%2;
    }
    t[i][j]=l;
    cout << t[i][j]<<" ";
        }
        cout << endl;
}
    return 0;
}
SP
  • Rejestracja: dni
  • Ostatnio: dni
1

Po pierwsze kod jest brzydko sformatowany. Po drugie według mnie program powinien się wykrzaczyć bo wychodzisz poza zakres tablicy. Elementy tablicy numerujemy od 0, a Ty przypisujesz tu wartości od 1.

  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki. Miałeś racje za duży 'for'

Poddaję się na dziś. -.- Może ktoś wie jak to napisać?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

Przecież dostałeś odpowiedź i nawet potwierdziłeś że ją zrozumiałeś !
Indeksacja w C/C++ zaczyna się od zera. Zawsze!

  • Rejestracja: dni
  • Ostatnio: dni
0

Mój program, ale jeszcze coś nie działa.

Kopiuj
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main ()
{
    int t[6][6],l,T[2][2],z,q,x,y;
    srand(time(NULL));
    for (int i=1; i<6; i++)
    {
        for (int j=1; j<7; j++)
        {
            {
                l=(int)rand()%2;
            }
            t[i][j]=l;
            cout << t[i][j]<<" ";
        }
        cout << endl;
    }//losowanie
    cout << "pkt a: ";
    cin >> x >> y;
    cout << endl << "pkt b: ";
    cin >> z >> q;
    for (int i=x; i<6; i++)
    {
        for (int j=y; j<7; j++)
        {
            if (t[i+1][j]==1);
            else if (t[i][j+1]==1)
            {
                if (i==z&&j==q) cout << "jest";
            }

        }
    }
    return 0;
}
 
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Nie rozumiem tego:

Kopiuj
            if (t[i+1][j]==1);
            else if (t[i][j+1]==1)
            {
                if (i==z&&j==q) cout << "jest";
            }
NU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

Tz. chciałem żeby przechodziło do kolejnej i zapomniałem, że w pętli zwiększa. Już poprawiłem u siebie. "jest" oznacza że drogę znalazł.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
2

Prościej chyba nie da rady:

Kopiuj
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main ()
  {
   srand(time(0));
   unsigned t[6][6];
   for(unsigned y=0;y<6;++y,cout<<endl) for(unsigned x=0;x<6;++x) cout<<' '<<(t[y][x]=rand()%2);
   cout<<"pkt a: ";
   unsigned ax,ay;
   cin>>ax>>ay;
   cout<<"pkt b: ";
   unsigned bx,by;
   cin>>bx>>by;
   t[ay][ax]=2;
   for(unsigned y=ay;y<6;++y)
     {
      for(unsigned x=ax;x<6;++x)
        {
         if((t[y][x]==1)&&(((x>ax)&&(t[y][x-1]==2))||((y>ay)&&(t[y-1][x]==2)))) t[y][x]=2;
        }
     }
   cout<<(t[by][bx]==2?"jest":"brak")<<endl;
   for(unsigned y=0;y<6;++y,cout<<endl) for(unsigned x=0;x<6;++x) cout<<' '<<t[y][x];
   return 0;
  }
NU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

Dzięki wielkie! Zrobiłeś nawet ze sprawdzeniem. Szacun.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.