函数处于循环中时不会创建随机序列-Pascal

时间:2019-11-30 18:03:08

标签: pascal

我的代码写在PascalABC.NET上。 函数(RandomRoute)正在运行,但是当我尝试以周期方式运行几次时,它无法以适当的方式运行。每次迭代都必须生成一个新序列。

output

在这张照片上,您可以看到我的意思。我不明白问题出在哪里。 附言对不起,我的英语

function RandomRoute (n : integer; a : TMatrix) : List<integer>;
var
  k,i,j,iRand, pathLength: integer;
  flag : boolean;
  tempList : List<integer> := new List<integer>;
Begin
  randomize; 
  for k := 0 to (n-1) do
  begin
    repeat
      iRand := random(0, (n-1));
      if (tempList.Contains(iRand)) then       
      begin
        flag := false;
      end
      else
      begin
        flag := true;
        tempList.Add(iRand);
      end;            
    until (flag);
  end;   

  tempList.Add(tempList[0]);    
  pathLength := 0;
  for var z : integer := 0 to (n-1) do
  begin
    i := tempList[z]; j := tempList[z+1];
    pathLength := pathLength + a[i,j];
  end;
  tempList.Add(pathLength);
  Result := tempList;
End;

主要功能

BEGIN
  var randRoute : List<integer> := new List<integer>;
  var minRoute : List<integer> := new List<integer>;

  routeLength := 0; 

  writeln ('City Count:');
  readln (n); 
  readln (firstcity);
  MatFullRandom(n, mass); 
  massCopy := mass;

  DispMat (n, mass);
  GreedyAlg(firstcity, n, mass);

  Writeln ('RANDOM ROUTES:');

  randRoute := RandomRoute(n, massCopy);
  minRoute := randRoute;

  for var z : integer := 0 to 10 do
  begin      
    randRoute := RandomRoute(n, massCopy);
    if (randRoute.Last < minRoute.Last) then minRoute := randRoute;
    writeln('Random Route ', randRoute);    
  end;

  writeln('The best from randomRoute: ',minRoute);

  MatrixRandomRoute(n, minRoute, massCopy, massRed);
  DispMat(n, MassRed);
  DrawGraph(n, mass); 
END.

1 个答案:

答案 0 :(得分:2)

Randomize()函数使用通常从系统时钟派生的数字初始化随机数生成器。循环调用Randomize()和调用Random()可以重复产生相同的结果。

因此,在程序中仅调用一次Randomize()