4x4 网格 c++ 上的最短路径
Shortest path on 4x4 grid c++
我看到还有另一个问题几乎就像这样,但答案并没有按照我想要的方式进行。
这是针对作业的。 我有一个 4x4 网格和一个用户输入的开始和结束 (x,y( 坐标。 我需要将此信息从 main 发送到一个 create_path 函数,该函数计算最短路径,然后将其发送到另一个函数,该函数逐步打印标记位置的网格,直到它到达所需的坐标。我不能使用数组,我必须有主数组、create_path数组和print_path数组。 标记只能向上、向下、向左和向右移动。
所以我真的不知道该怎么办。我想过为网格中的每个单元格创建一个变量,但不知道从那里开始。 如果有人知道一个只使用 main 和另一个功能的快速解决方案,那没关系,因为我的时间不多了。
你不需要看到 main,因为它只是向用户显示网格并要求他们输入,然后将输入发送到此函数:
void create_path(int xStart, int xEnd, int yStart, int yEnd)
{
}
正如您在评论中已经指出的那样,从 (0,2( 到 (3,1( 的最短路径是"右 3 向下 1",换句话说:右 3-0=3 和向下 2-1=1
这已经是差不多的答案了...
一般来说,如何找到从(xStart,yStart(到(xEnd,yEnd(的最短路径?你只是再次做和以前一样的事情。它是"right xEnd-xStart, down yEnd-yStart"。
因此,print_path函数所需要的只是"我从哪里开始"和"我向右/向左走多少,向上/向下走多少?
因此,您可以在create_path中使用两个变量
int right = xEnd-xStart;
int down = yEnd-yStart;
然后你把这些发送给print_path。您尚未提供print_path的签名,但它可能如下所示:
void print_path(int xStart, int yStart, int right, int down)
{
}
在此函数中,您只需执行两个循环:
int i = xStart;
int xend = xStart + right; // observe: if right is negative, it's just subtraction
bool right = (right >= 0); // are we going right or left?
while(i != xend) {
std::cout << "next waypoint: x = " << i << ", y = " << yStart << std::endl;
if (right) {
i++;
} else {
i--;
}
}
现在你对 y 坐标做同样的事情
int j = yStart;
int yend = yStart + down;
bool down = (down >= 0); // are we going down or up?
while(j != yend) {
std::cout << "next waypoint: x = " << xend << ", y = " << j << std::endl;
if (down) {
j++;
} else {
j--;
}
}
create_path必须是递归函数。
给出的条件应该是:
- 首先检查点是否在边界内
- 然后检查该点是否是所需的点,如果是,则返回 否则,对
- 上、下、左、右和对角线点递归。
- 内存效率表示最短路径的方法?
- 用于查找网格中最短路径的算法
- 查找最短路径算法
- BFS 打印最短路径
- 使用 Dijkstra 算法跟踪两个节点之间的最短路径
- 使用C++具有两个数字的最短路径算法.(C++)
- 使用迭代深度优先搜索算法的未加权图的最短路径
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 如何使用贝尔曼-福特算法返回所有具有捆绑重量的最短路径?
- 使用优先级队列查找所有与 Dijkstra 相同的最短路径
- 尝试在图形中查找最短路径时的无限循环
- C++计算有向图中的最短路径
- 使用BFS存储和打印最短路径
- 如何制作由原始图形的最短路径边组成的新图形
- 有没有一种方法可以使用弗洛伊德-沃歇尔算法给出最短路径,其中存在负权重循环而不允许重叠边缘?
- 加权图的开始和结束的最短路径
- 使 c++11 Dijkstra 实现返回最短路径
- 弗洛伊德最短路径算法C++
- Dijkstra 最短路径算法性能 std::p riority_queue VS std::set.
- 在 stl 中使用向量和对的最有效实现 Dijkstra 最短路径C++