我试图编写一个函数,可以为给定的2D点(x,y)生成随机路径。
现在路径有一些要求,我希望它能满足它才能使它有效。 路径不能:
我还想确保路径从左侧开始,到右侧结束,希望保持简单。
所以我正在寻找可以做的事情:
......... | ......... | ########.
......... | ......... | .......#.
##....### end | ....####. | ...#####.
.######.. | #####..#. | ...#.....
......... | .......## end | ...###### end
但是,我不知道从哪里开始,并且可以获得与此类似的信息。
我可以去A *溃败,但这看起来有点过分,而且从我对A *的了解(变化很小)我需要创建"假的"障碍。无论如何,在我咆哮之前,有人可以帮助我吗?
非常感谢任何建议!谢谢。
答案 0 :(得分:1)
您可以一次尝试一个方格,直到找到解决方案:
bool points[Num_Rows][Num_Columns] = { false };
,跟踪你去过的地方std::pair<int,int> cursor { rand() % Num_Rows, 0 };
,跟踪您的位置
重复
points[]
元素记录您已移动到那里
答案 1 :(得分:1)
以下说明和代码段应该为您提供足够的信息来解决问题,而无需提供准确的解决方案。注意:以下内容不符合您的所有标准(例如,防止直线解决方案),但任何缺失的部分都应该很容易填写。
// Step 1
Grid grid(10, 10);
// Step 2
Cell start = grid.generateRandomCell();
// Step 3
Cell end = start;
while (end == start)
{
end = grid.generateRandomCell();
}
std::vector<Cell> solutionPath;
// Step 4
Cell pos = start;
while (pos != end)
{
// Step 4.1
grid.setValue(pos, '#');
// Step 4.2
std::vector<Cell> possibleMoves = getPossibleMoves(grid, pos);
if (!possibleMoves.empty())
{
// Step 4.2.1
solutionPath.push_back(pos);
pos = possibleMoves[rand() % possibleMoves.size()];
}
else
{
// Step 4.2.2
if (!solutionPath.empty())
{
pos = solutionPath.back();
solutionPath.erase(--solutionPath.end());
}
else
{
pos = start;
grid.reset();
}
}
}
// Step 5
grid.reset();
// Step 6
for (size_t i = 1; i < solutionPath.size(); ++i)
{
grid.setValue(solutionPath[i], 'A' + ((i - 1) % 26));
}
grid.setValue(start, '@');
grid.setValue(end, '!');
// Step 7
std::cout << grid << "\n";