c++小蚪找妈妈 [题目描述] 有一天,鸭妈妈带着她的孩子到池塘中来游水。小蜂蚪看见小鸭子跟着妈妈在水里划来划去,就想起自己的妈妈来了。小蜂蚪你问我,我问你,可是谁也不知道。“我们的妈妈在哪里呢?” 他们一起游到鸭妈妈身边,问鸭妈妈:“鸭妈妈,鸭妈妈,您看见过我们的妈妈吗? 请您告诉我们怎么找到我们的妈妈?” 鸭妈妈说:我们可以把池塘划分为 n 行 m 列。用() 来表示第 i 行第j列的位置。小蝌蚂的找妈妈之旅就开始了,她将从(Sx,Sy)出发。在每一个(ij)位置有着任务指引,告诉小蝌蚪下一步应该前往第i 行第j列的位置。 请你依次输出小蟒蚪到达的位置信息,数据保证能够在有限步内找到妈妈[ 输入的第一行为四个整数 n,m,Sx,Sy 分别代表行数、列数和开始的坐标。接下来 n行,每行 2m 个整数。第 i行的第 2-1 和第 2个数为第 行第 列的“任务指引”。若两个“任务指引”数均为 0,则代表小蟒蚪找到了妈妈。这些数均为 0~maxin,m) 范围内的整数。 [ 输出若干行,每行两个数 x,y,由空格分开,代表小蝌蚪经过了 (x,y)
时间: 2024-02-15 09:04:47 浏览: 168
以下是一个简单的 C++ 代码示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int N = 105;
int n, m, sx, sy;
int task[N][2*N];
bool visited[N][N];
vector<pair<int, int>> path;
bool dfs(int x, int y) {
if (task[x][y] == 0) {
return true;
}
visited[x][y] = true;
int nx = task[x][y] / m + 1, ny = task[x][y] % m;
if (ny == 0) {
nx--;
ny = m;
}
if (!visited[nx][ny] && dfs(nx, ny)) {
path.emplace_back(nx, ny);
return true;
}
return false;
}
int main() {
cin >> n >> m >> sx >> sy;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= 2*m; j++) {
cin >> task[i][j];
}
}
dfs(sx, sy);
path.emplace_back(sx, sy);
for (int i = path.size()-1; i >= 0; i--) {
cout << path[i].first << " " << path[i].second << endl;
}
return 0;
}
```
该代码实现了深度优先搜索算法,在给定的任务指引矩阵 `task` 中找到从起点 `(sx, sy)` 到达妈妈位置的路径,并将路径逆序输出。其中,`visited` 数组用于记录搜索过的节点,`path` 向量用于记录路径。
阅读全文