社区讨论

dfs求调

P1238走迷宫参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lvhhf0gk
此快照首次捕获于
2024/04/27 10:27
2 年前
此快照最后确认于
2024/04/27 12:23
2 年前
查看原帖
为什么没有输出啊啊啊
CPP
#include <iostream>

using namespace std;

int n, m;
int sx, sy, ex, ey, step;
int a[15 + 5][15 + 5], mp[15 + 5][15 + 5] = {0};
int x_[5] = {0, -1, 0, 1};
int y_[5] = {-1, 0, 1, 0};
int ans[5000][3];

void dfs(int x1, int x2, int y1, int y2, int m, int n)
{
	if(x1 == x2 && y1 == y2) //到终点了
	{
		for(int i = 0; i < step; i++)
		{
			cout << "(" << ans[i][0] << "," << ans[i][1] << ")" << "->";
		}
		cout << "(" << x2 << "," << y2 << ")" << endl;
		return ;
	}

	for(int i = 0; i < 4; i++)
	{
		int dx = x1 + x_[i];
		int dy = y1 + y_[i];
		if(mp[dx][dy] != 1 /*没有障碍*/ && dx != x1 && dy != y1 /*不在起点*/ && dx <= m && dy <= n /*没有越界*/ && a[dx][dy] != 1 /*没有经过*/)
		{
			a[dx][dy] = 1; //标记为经过
//			cout << "(" << dx << "," << dy << ")" << "->";
			ans[step][0] = dx;
			ans[step][1] = dy;
			dfs(dx, dy, x2, y2, m, n); //继续搜索
			a[dx][dy] = 0;
		}
	}
}

signed main()
{

	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);// 关闭同步流

	cin >> m >> n;
	for(int i = 1; i <= m; i++)
	{
		for(int j = 1; j <= n; j++)
		{
			cin >> a[i][j];
		}
	}
	cin >> sx >> sy;
	cin >> ex >> ey;

	for(int i = 1; i <= m; i++)
	{
		for(int j = 1; j <= n; j++)
		{
			if(a[i][j] == 0)
			{
				mp[i][j] = 1;
			}
		}
	}

	dfs(sx, ex, sy, ey, m, n);

	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...