不用pair对象改成广度优先搜索bool dfs(int to_x, int to_y, int box_x, int box_y, int people_x, int people_y) { visit2[people_x][people_y] = 1; if (to_x == people_x && to_y == people_y) { flag1 = true; return true; } if (!flag1) { for (int i = 0; i < 4; i++) { int xx = people_x + dx[i]; int yy = people_y + dy[i]; if (xx<1 || yy<1 || xx>n || yy>m || (xx == box_x && yy == box_y) || board[xx][yy] == 1 || visit2[xx][yy]) continue; dfs(to_x, to_y, box_x, box_y, xx, yy); if (flag1) return true; } } return false; }
时间: 2024-04-10 12:26:47 浏览: 66
CSharp_Int_TextBox.rar_C#int_c# console输入int_c# textbox 判断_c# te
如果你想将代码改成不使用pair对象的形式,可以使用两个分开的数组来表示坐标。下面是改写后的代码:
```cpp
bool bfs(int to_x, int to_y, int box_x, int box_y, int people_x, int people_y)
{
queue<int> qx, qy;
qx.push(people_x);
qy.push(people_y);
visit2[people_x][people_y] = 1;
while (!qx.empty() && !qy.empty())
{
int cur_x = qx.front();
int cur_y = qy.front();
qx.pop();
qy.pop();
if (cur_x == to_x && cur_y == to_y)
{
flag1 = true;
return true;
}
for (int i = 0; i < 4; i++)
{
int xx = cur_x + dx[i];
int yy = cur_y + dy[i];
if (xx < 1 || yy < 1 || xx > n || yy > m || (xx == box_x && yy == box_y) || board[xx][yy] == 1 || visit2[xx][yy])
continue;
qx.push(xx);
qy.push(yy);
visit2[xx][yy] = 1;
}
}
return false;
}
```
这个改写后的代码使用了两个分开的队列 `qx` 和 `qy` 来分别存储横纵坐标。在每次取出队列中的一个点时,同时取出对应的横纵坐标进行处理。其他逻辑与之前给出的代码相同。希望这个改写对你有帮助!
阅读全文