Nie wiem jak zrobić tablice list. Napisałem na razie coś takiego:
program tablicalist;
type
Wskaznik = ^Miasto; //wskaznik na element listy
Miasto = record
Droga : longint; //zawartosc elemetu
Wsk : Wskaznik; //wskaznik na nastepny element
end;
Graf = record
Rozwiazanie : longint;
Lista : Miasto;
end;
const
Top : Wskaznik = nil; //wartownik listy
var
x, d, f, m, n, o, p : longint;
t : array[1..100000] of Graf;
//POCZATEK PROCEDUR LISTY
procedure Utworzdroge (x : longint; Poprzedni : Wskaznik);
var
Nowy : Wskaznik;
begin
new(Nowy); //nowa droga
Nowy^.Droga := x; //numer drogi
Nowy^.Wsk := Poprzedni^.Wsk; //ustaw wskaznik
Poprzedni^.Wsk := Nowy; //dolacz do listy
end;
procedure UtworzTop(x : longint);
begin
new(Top); //stworz top
Top^.Droga := x; //ZMIANA!!!!!!!!!! //nadaj wartosc glowie
Top^.Wsk := nil; //nadaj wskaznikowi wartosc 0
end;
function Szukaj(x : longint):Wskaznik;
var
pomoc : Wskaznik;
begin
pomoc := Top;
while (pomoc^.Wsk <> nil)
and (pomoc^.Droga <> x) do
pomoc := pomoc^.Wsk;
Szukaj := pomoc;
end;
procedure Usun(x : longint);
var
pomoc : Wskaznik;
i : integer;
begin
if Top^.Droga = x then
begin
dispose(Top);
Top := Top^.Wsk;
end
else
begin
pomoc := Top;
while (pomoc^.Wsk <> nil) and
(pomoc^.Wsk^.Droga <> x) do
pomoc := pomoc^.Wsk;
dispose(pomoc^.Wsk);
pomoc^.Wsk := pomoc^.Wsk^.Wsk;
end
end;
procedure Wstaw(x : longint; Za : longint);
begin
if Top = nil then
UtworzTop(x)
else
Utworzdroge(x, Szukaj(Za));
end;
procedure Dopisz(x : longint);
var
pomoc, Nowy : Wskaznik;
begin
Wstaw(x, 0);
end;
procedure WypiszListe; //tymaczasowe
{ wypisuje caĄ zawarto† listy }
var
pomoc : Wskaznik;
begin
pomoc := Top; { wypisujemy od poczĄtku }
while pomoc <> nil do
begin
write(pomoc^.Droga); { nast©pny element }
pomoc := pomoc^.Wsk { wypisz go }
end;
writeln;
end;
//KONIEC PROCEDUR LISTY
begin
//WPROWADZANIE DANYCH
readln(m, d);
f := d;
n := m;
for m := 1 to n do
begin
with t[m] do
begin
UtworzTop(m);
end;
end;
for d := 1 to f do
begin
readln(p, o);
with t[p] do
begin
Dopisz(o);
end;
with t[o] do
begin
Dopisz(p);
end;
end;
//KONIEC WPROWADZANIA DANYCH
//test wypisz dane
for m := 1 to n do
begin
with t[m] do
begin
with Lista do
begin
Wypiszliste;
end;
end;
end;
end.
Niestety, coś jest nie tak i każdy element tablicy ma wspólną liste ;(.
Podejrzewam, że to przez wspólne wskaźniki, ale nie wiem jak je rozdzielić dla każdego elementu tablicy :(.
Proszę o jak najszybszą odpowiedź, z góry dziękuje.