64,648
社区成员
发帖
与我相关
我的任务
分享
//回溯法求路径 (xi, yi)表示当前位置 (xe, ye)表示目标位置
bool backtracking (int xi, int yi, int xe, int ye) //通过返回值好确定有没有找到一条通路
{
if (xe == xi && ye == yi) //若到达目的地则输出路径
{
cout << "迷宫路径如下:" << endl;
for (int i = 0; i <= top; i++)
cout << "(" << p[i].col << ", " << p[i].row << ") -> ";
cout << endl;
return true;
}
else
{
int x, y;
top += 1;
p[top].col = xi;
p[top].row = yi;
for (int i = 0; i < 4; i++) //搜索这位置的可行路径
{
switch (i)
{
case 0 : x = xi + 1; y = yi; break;
case 1 : x = xi; y = yi + 1; break;
case 2 : x = xi - 1; y = yi; break;
case 3 : x = xi; y = yi - 1; break;
}
if(p[top - 1].col == x && p[top - 1].row == y) continue; //在新的一点找路的时候,别找回头路
if ((x >= 0 && x < 5) && (y >= 0 && y < 5) && maze [x][y] == 0) //若为通路,x和y到达边界的时候,不要再判断了,不然maze都越界了
{
bool bRet = backtracking (x, y, xe, ye);
if(bRet) return true; //找到了就不用再执行了
top -= 1;
}
}
}
return false;
}
最后,main里backtracking (0, 0, 4, 4);也不要写死成4,4啊,不是判断输入的点么