代码:
procedure CreateGraphic(G:TGraph);
var
i,j:integer;
Stra:string;
begin
Form2.ADOQuery2.Active:= True;
Form2.ADOQuery2.First;
G.n:= Form2.ADOQuery2.RecordCount;
Form2.Memo1.Clear;
for i:= 0 to (G.n - 1) do
begin
G.Vexs[i]:= i;
Stra:='';
for j:= 0 to (G.n - 1) do
begin
if IntToStr(Form2.ADOQuery2.Fields[j].AsInteger) = #0 THEN
G.Edges[i,j]:=1000
else
G.Edges[i,j]:= Form2.ADOQuery2.Fields[j].AsInteger;
Stra:=Stra +' ' + IntToStr(G.Edges[i,j]);
end;
Form2.Memo1.Lines.Add(Stra);
Form2.ADOQuery2.Next;
end; for i:= 0 to (G.n - 1) do
begin
Stra:='';
for j:=0 to (G.n - 1)do
begin
Stra:=Stra +' ' + IntToStr(G.Edges[i,j]);
end;
Form2.Memo1.Lines.Add(Stra);
end;
end;
结果:
0 0 10 0 30 100
0 0 5 0 0 0
0 0 0 50 0 0
0 0 0 0 0 10
0 0 0 20 0 60
0 10 0 0 0 0
14236776 1 2 3 4 5
0 0 5 0 0 0
0 0 0 50 0 0
0 0 0 0 0 10
0 0 0 20 0 60
0 10 0 0 0 0
为什么第2次输出的第一行是这样子的?
procedure CreateGraphic(G:TGraph);
var
i,j:integer;
Stra:string;
begin
Form2.ADOQuery2.Active:= True;
Form2.ADOQuery2.First;
G.n:= Form2.ADOQuery2.RecordCount;
Form2.Memo1.Clear;
for i:= 0 to (G.n - 1) do
begin
G.Vexs[i]:= i;
Stra:='';
for j:= 0 to (G.n - 1) do
begin
if IntToStr(Form2.ADOQuery2.Fields[j].AsInteger) = #0 THEN
G.Edges[i,j]:=1000
else
G.Edges[i,j]:= Form2.ADOQuery2.Fields[j].AsInteger;
Stra:=Stra +' ' + IntToStr(G.Edges[i,j]);
end;
Form2.Memo1.Lines.Add(Stra);
Form2.ADOQuery2.Next;
end; for i:= 0 to (G.n - 1) do
begin
Stra:='';
for j:=0 to (G.n - 1)do
begin
Stra:=Stra +' ' + IntToStr(G.Edges[i,j]);
end;
Form2.Memo1.Lines.Add(Stra);
end;
end;
结果:
0 0 10 0 30 100
0 0 5 0 0 0
0 0 0 50 0 0
0 0 0 0 0 10
0 0 0 20 0 60
0 10 0 0 0 0
14236776 1 2 3 4 5
0 0 5 0 0 0
0 0 0 50 0 0
0 0 0 0 0 10
0 0 0 20 0 60
0 10 0 0 0 0
为什么第2次输出的第一行是这样子的?
Vexs: Array [1..40] of integer;
Edges: Array [1..40,1..40] of integer;
n: integer; //顶点数
end;
Stra:=Stra +' ' + IntToStr(G.Edges[i,j]);
end;所有的G.Edgres[0,j]和G.Edgres[i,0]都访问都越界了!