我的代码写在PascalABC.NET上。 函数(RandomRoute)正在运行,但是当我尝试以周期方式运行几次时,它无法以适当的方式运行。每次迭代都必须生成一个新序列。
。
在这张照片上,您可以看到我的意思。我不明白问题出在哪里。 附言对不起,我的英语
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.
答案 0 :(得分:2)
Randomize()
函数使用通常从系统时钟派生的数字初始化随机数生成器。循环调用Randomize()
和调用Random()
可以重复产生相同的结果。
因此,在程序中仅调用一次Randomize()
。