![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Изучила динамические структуры и пытаюсь выполнить задание: создать односвязный линейный список,содержащий список ребер графа и вывести его на экран в стринггрид.
В стрингриде находится матрица смежности графа,а чтобы составить список ребер я прохожусь по элементам матрицы,стоящих выше главной диагонали и на ней,и если нахожу цифру 1,то в односвязный линейный список добавляю i и j. 1. Что я делаю не так,потому что список не выводится (скорее всего неправильно где-то создаю)? Может кто-нибудь указать ошибку? 2. Можно ли в одну ячейку записать одновременно два значения через пробел? Пример: входные данные: 5 0 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 выходные данные: 1 3 2 3 2 5 Код:
type matr=array [1..10,1..10] of integer; mass=array [1..100] of integer; uk=^list; list=record inf:integer; next:uk; end; var Form1: TForm1; ms:matr; x,y:mass; i,j,n:Integer; blist:uk; flag:boolean; str:string; implementation {$R *.xfm} //Ïсоздание нового эл-та списка procedure make(var blist:uk; inf:integer); begin new(blist); blist^.inf:=inf; blist^.next:=nil; end; //проверка на пустоту function pust(blist:uk):boolean; begin if(blist<>nil) then result:=false else result:=true end; //вставка эл-та в конец списка procedure incertK(blist:uk; inf:integer); var blist1:uk; begin if(pust(blist))then begin showmessage('Пустой'); exit; end; while(blist^.next<>nil) do begin blist:=blist^.next; end; make(blist1,inf); blist^.Next:=blist1; end; //вывод на печать списка procedure printspisok(blist:uk); var str:string; begin if pust(blist) then begin ShowMessage('Pustoy'); str:=''; Exit; end; str:=''; while(blist<>nil)do begin str:=str+inttostr(blist^.inf)+' '; blist:=blist^.next; end; end; //составление списка ребер графа procedure TForm1.Button2Click(Sender: TObject); var i,j:Integer; begin for i:=1 to n do begin for j:=1 to n do begin if (i<=j) and (StrToInt(sd1.Cells[j,i])=1) then begin if blist=nil then make(blist,i) else incertK(blist,i); end; end; end; printspisok(blist); Label1.Caption:=str; end; |