在“自我避免随机游走”的情况下,我有一个具有步长坐标配置的二维向量。我希望能够检查某个站点是否已被占用,但问题是轴可以为零,因此检查fabs()
坐标是否为true
(或它有一个值)将不起作用。因此,我考虑循环遍历这些步骤并检查我的坐标是否等于所有轴上的另一个坐标,如果是,则退后一步再试一次(所谓的深度优先方法)。
有没有更有效的方法来做到这一点?我见过有人使用具有所有可能坐标的布尔数组,如下所示:
bool occupied[nMax][nMax]; // true if lattice site is occupied
for (int y = -rMax; y <= rMax; y++)
for (int x = -rMax; x <= rMax; x++)
occupied[index(y)][index(x)] = false;
但是,在我的程序中,维数是未知的,因此可以采用以下方法:
typedef std::vector<std::vector<long int>> WalkVec;
WalkVec walk(1, std::vector<long int>(dof,0));
siteVisited = false; counter = 0;
while (counter < (walkVec.back().size()-1))
{
tdof = 1;
while (tdof <= dimensions)
{
if (walkHist.back().at(tdof-1) == walkHist.at(counter).at(tdof-1) || walkHist.back().at(tdof-1) == 0)
{
siteVisited = true;
}
else
{
siteVisited = false;
break;
}
tdof++;
}
work where dof if 维数。(检查零检查位置是否是原点。三个零坐标或同一步骤上的三个访问坐标是使其成为真的唯一方法)有没有更有效的方法呢?