探索具有未定义大小的矩阵
Explore a matrix with undefined size
我正试图通过用二维矩阵建模来探索环境。然而,我事先不知道矩阵的大小。
目前,我正在使用std::vector<std::vector>结构来抽象矩阵并将其调整为特定大小。如果我的应用程序达到了原来调整大小的限制,我会再次执行该操作。
我正在结合DFS和a*算法来探索这个矩阵。我的探索者代理可以向前、向后、向左和向右移动。每当资源管理器到达一个位置时,他都会将邻居添加到DFS的堆栈中。例如,如果他在位置(25,25),它将添加邻居(25,24)、(25,26)、(24,25)和(26,25)。
到目前为止,它运行良好。然而,有一种情况是我没有想到的。我一直在用浏览器从矩阵的一角开始测试我的算法,这表现得很好。但是,如果浏览器从房间的中间或任何其他不在角落的位置开始,我的算法就无法正常工作。
之所以会发生这种情况,是因为我在矩阵中的0,0位置启动了我的资源管理器。因此,如果资源管理器从房间的中间开始,一些位置将不会被探索,因为它们会为我的资源管理器生成负指数。有人知道我能做些什么来解决这个问题吗?
一种方法是像您所说的那样简化它,并强制它从一个角落开始。
更复杂的方法是,每当遇到索引为负数时,都要调整数组和以前生成的所有索引的大小,以强制它们为正数。对于性能,可能是大块的,比如简单地在所有内容上加10或100。
因此,当你添加邻居时,你会添加负数的检查,如果其中任何一个是负数,你会对迄今为止生成的所有索引应用相同的加法,以强制每个索引为正数。
这只是一个假想的坐标系,重要的是它们的相对位置。最后,决定哪一个应该是0,0,并从x、y和ALL索引中减去足够的值,使向量归一化。
还有一个性能问题,如果你从一个足够大的正数开始,你可能会减少或消除这种坐标图移动的需要,直到最后。比如,如果你从100100开始,那么你需要移动100个节点才能得到负数。如果任何方向上的节点都少于100个,则在完成映射之前不必进行平移。
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 此增量后语句是否会导致未定义的行为?
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- 探索具有未定义大小的矩阵