问题如下:流浪者从网格坐标(x,y)开始,想要到达坐标(0,0)。从每个网格点开始,流浪者可以向北走8步或向南走3步或向东走5步或向西走6步(8N / 3S / 5E / 6W)。
如何使用广度优先搜索找到从(X,Y)到(0,0)的最短路径?
澄清:
答案 0 :(得分:2)
此问题的算法是:
对于每个轴,向着它走,直到另一个轴上的位置为0。
伪代码:
while (x!=0) {
if (x>0) x-=6;
else x+=5;
}
while (y!=0) {
if (y>0) y-=8;
else y+=3;
}
但是,我不明白为什么你需要搜索路线 - 它并不复杂。
答案 1 :(得分:1)
由于“thejh”表示不需要搜索,但是你的作业需要一个。
合理的方法是
分析。任意(x,y)起始位置都是可能吗?检查允许的移动,你会发现它们可以组合在一起产生一步水平移动和一步垂直移动,所以答案是肯定的(因为你的移交提供了详细信息)。
弄清楚“广度优先搜索”是什么。维基百科是你的朋友(虽然,如果你有权访问大学图书馆,我确实推荐Patrick Henry Winston的旧人工智能,这是非常好的,非常清晰的解释)。尝试解决一些更简单的问题。
以同样的方式完成作业的问题。如果您遇到任何技术C ++问题,请在此处询问。
干杯&第h。,
答案 2 :(得分:1)
这是我使用队列的答案(真的基于你的答案):
//set x to start position
//set y to start position
do {
if (x<0) Queue.Push(8N);
if (x>0) Queue.Push(3S);
if (y<0) Queue.Push(5E);
if (y>0) Queue.Push(6W);
while (!Queue.Empty())
{
Move(Queue.Pop());
}
} while (x && y);
这是令人费解的,但遵循指示。
答案 3 :(得分:-2)
我将继续回答我自己的问题以供将来参考。
伪码:
while (true) {
if (destination reached)
break;
addToQueue(go north);
addToQueue(go south);
addToQueue(go east);
addToQueue(go west);
getNextFromQueue;
}
还应该注意,此应用程序的执行时间非常非常快,因此请使用较小的坐标值进行测试。例如,坐标(1,1)给出7个宽度级别,需要16384次迭代。