| 发表于:2007-09-02 20:54:467楼 得分:0 |
type myintarray = array of integer; mytwodarray = array of array of integer; var z, y, x, v: mytwodarray; //***************************************************** //获取数组中值为1的元素在数组中的下标 function findindex(a: myintarray): myintarray; var i, j, k: integer; arraytemp: myintarray; begin // setlength(a,lena); j := 0; for i := low(a) to high(a) do if a[i] = 1 then j := j + 1; k := 0; setlength(arraytemp, j); for i := low(a) to high(a) do begin if a[i] = 1 then begin arraytemp[k] := i; k := k + 1; end; end; result := arraytemp; end; //获取二维矩阵a的第i行 function findrow(a: mytwodarray; i: integer): myintarray; var j: integer; arraytemp: myintarray; begin setlength(arraytemp, length(a[0])); for j := low(a[0]) to high(a[0]) do arraytemp[j] := a[i, j]; result := arraytemp; end; //获取二维矩阵a的第j列 function findcol(a: mytwodarray; j: integer): myintarray; var i: integer; arraytemp: myintarray; begin setlength(arraytemp, length(a)); for i := low(a) to high(a) do arraytemp[i] := a[i, j]; result := arraytemp; end; //判断数组中是否全为0元素 function isallzero(a: myintarray): boolean; var i: integer; begin for i := low(a) to high(a) do begin if a[i] = 1 then begin result := false; exit; end; end; result := true; end; //找出行标i所对应的所有下标 procedure findallindex(i: integer; atwo: mytwodarray); var j, k: integer; arraytempc, arraytempd: myintarray; begin strlist.add(inttostr(i)); arraytempc := findrow(atwo, i); if not isallzero(arraytempc) then begin arraytempd := findindex(arraytempc); for j := low(arraytempd) to high(arraytempd) do begin k := arraytempd[j]; findallindex(k, atwo); end; end; end; procedure tform1.button1click(sender: tobject); var arraytemp1: myintarray; arraytemp2, arraytemp3, arraytemp4, arraytemp5: myintarray; sltemp: tstringlist; i,j,k,l:integer; begin //由z生成y,z为初始矩阵 for i := low(z) to high(z) do begin arraytemp1 := findrow(z, i); if not isallzero(arraytemp1) then begin sltemp := tstringlist.create; strlist := tstringlist.create; findallindex(i, z); for k := 1 to strlist.count - 1 do begin y[i, strtoint(strlist.strings[k])] := 1; end; sltemp.free; strlist.free; end; end; end; 这是截取出来的一部分,拿出来希望大家多提意见 主要是那个递归程序findallindex | | |
|