Użytkownik: reason
Tytuł: NEWS_bezpowtorzen2
Język: Pascal
Data: 8 lut 2010, 16:54
Kody powiązane:
Ocena:
// tablica jest of string i jezeli w napisie w danej komorce jest jedna z liter N, S, E, W to // mozemy z tego pola poruszac sie w odpowiednich kierunkach (np. jezeli mamy N i E to polnoc i wschod). // program sprawdza wszystkie mozliwe drogi i wypisuje kazda z nich w osobnej linii. jedyny warunek jest // nastepujacy - w kazdej drodze kazde pole tablicy mozna przejsc tylko raz. program drogastring; uses crt; const n = 4; type tab = array[1..n, 1..n] of string; var qn, qs, qw, qe : boolean; t,t1 : tab; i, j : integer; droga : string; procedure kierunki(a : string); // procedura zmieniajaca wartosci globalne kierunkow w ktore mozna sie ruszyc var i, p : integer; begin p := length(a); for i := 1 to p do begin if a[i] = 'n' then qn := true; if a[i] = 's' then qs := true; if a[i] = 'e' then qe := true; if a[i] = 'w' then qw := true; end; end; function byl(a : string) : boolean; var p : integer; begin p := length(a); if (a[p] = '#') then byl := true else byl := false; end; procedure wypisz(droga : string); var i, j : integer; begin writeln ('Dalo sie przejsc drogą: ',droga); droga := ''; // czyszcze droge dla kolejnego przejscia for i := 1 to n do for j := 1 to n do t[i,j] := t1[i,j]; // przywracam kopie tablicy; end; procedure skok(i,j : integer; droga : string); var a : string; begin t[i,j] := t[i,j] + '#'; a := t[i,j]; kierunki(a); if (i = n) and (j = n) then wypisz(droga) else begin if (qn) and (j >= 2) and not(byl(t[i,j-1])) then skok(i,j-1,droga + 'n '); if (qs) and (j <= n-1) and not(byl(t[i,j+1])) then skok(i,j+1,droga + 's '); if (qe) and (i <= n-1) and not(byl(t[i+1,j])) then skok(i+1,j,droga + 'e '); if (qw) and (i >= 2) and not(byl(t[i-1,j])) then skok(i-1,j,droga + 'w '); end; end; begin clrscr; droga := ''; qn := false; qw := false; qe := false; qs := false; for i := 1 to n do for j := 1 to n do t[i,j] := 'es'; for i := 1 to n do for j := 1 to n do t1[i,j] := t[i,j]; // robie kopie tablicy, bo tablice t bede modyfikowal; {t[1,1] := 'darek'; t[1,2] := 'nesw'; t[1,3] := 'waln'; t[1,4] := 'mores'; t[2,1] := 'eokw'; t[2,2] := 'wonads'; t[2,3] := 'avon'; t[2,4] := 'tadeusz'; t[3,1] := 'wajche'; t[3,2] := 'przeloz'; t[3,3] := 'anbrozy'; t[3,4] := 'nie'; t[4,1] := 'przelozy'; t[4,2] := 'ogorek'; t[4,3] := 'kielbasa'; t[4,4] := 'sznurek';} skok(1,1,droga); end.



