改组多维动态数组

时间:2017-01-26 15:57:01

标签: delphi pascal

如果我有一个2d动态数组(8x8),其中5 2 和10 1 ,其余 0 。我怎么把它洗牌,所以所有数字都随机放在网格上? (数组已经填充了这些数字)

1 个答案:

答案 0 :(得分:2)

不要使用多维数组。使用长度为8 * 8 = 64的一维数组。将值放入该数组中。然后洗牌。最后,将值逐个拉出到多维数组中。在伪代码中,如下所示:

N := 8;
SetLength(arr, N*N);
idx := 0;
for i := 1 to 5 do begin
  arr[idx] := 2;
  inc(idx);
end;
// etc., until array is populated

ShuffleArray(arr); // you know how to do this from your previous question

for idx := 0 to high(arr) do begin
  Grid[idx div N, idx mod N] := arr[idx];
end;