typedef struct loc {
int x;
int y;
loc(int x,int y) {
this->x = x;
this->y = y;
}
loc() {
}
};
const int maxn = 20;
int n, m, count1 = 0;
int a[maxn][maxn] = {0};
vector<pair<int, int>> road;
loc Begin, End;
loc MOVE[4] = {loc(0,-1),loc(-1,0),loc(0,1),loc(1,0)};
void DFS(int x,int y)
{
road.push_back(make_pair(x,y));
if (x == End.x&&y == End.y)
{
for (int i = 0, S = road.size(); i<S; ++i)
{
printf("(%d,%d)", road[i].first,road[i].second);
if (i != S - 1)
printf("->");
}
++count1;
printf("\n");
return;
}
for (int i = 0; i < 4; i++)
{
/*if (x + MOVE[i].x<1 || x + MOVE[i].x>n || y + MOVE[i].y<1 || y + MOVE[i].y>m)
continue;*/
if (a[x + MOVE[i].x][y + MOVE[i].y] == 1)
{
a[x + MOVE[i].x][y + MOVE[i].y] = 0;
DFS(x + MOVE[i].x, y + MOVE[i].y);
road.pop_back();
a[x + MOVE[i].x][y + MOVE[i].y] = 1;
}
}
}
int main()
{
while (scanf("%d %d", &n, &m) != EOF)
{
count1 = 0;
road.clear();
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &a[i][j]);
scanf("%d %d", &Begin.x, &Begin.y);
scanf("%d %d", &End.x, &End.y);
// road.push_back(Begin);
a[Begin.x][Begin.y] = 0;//将起点设为0,就不能再退回来了
DFS(Begin.x, Begin.y);
if (count1 == 0)
printf("-1\n");
}
return 0;
}
问题 F: 【递归入门】走迷宫
最新推荐文章于 2022-11-06 21:50:38 发布