DFS TLE
作者:
zplzh
,
2024-04-02 19:57:37
,
所有人可见
,
阅读 3
#include <bits/stdc++.h>
#define int long long
#define xx first
#define yy second
using namespace std;
const int N = 110;
typedef pair<int , int> PII;
int n, m, a, b, c, h;
char g[N][N];
int ans = 0x3f3f3f3f;
int dx[4] = {1,0,0,-1}, dy[4] = {0,-1,1,0 };
// 定义DFS函数
void dfs(int x, int y, int step) {
// 如果已经到达目标位置,则更新结果并返回
if (x == n && y == m) {
ans = min(ans, step);
return;
}
// 遍历四个方向
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
// 判断是否在合法范围内且未被访问过且可以通过
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && g[nx][ny] == '0') {
g[nx][ny] = '1'; // 标记已经访问过
dfs(nx, ny, step + 1);
g[nx][ny] = '0'; // 回溯
}
}
}
void solve() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> g[i][j];
// 调用DFS函数
dfs(1, 1, 0);
// 如果无法到达终点,则输出-1
if (ans == 0x3f3f3f3f)
cout << -1 << endl;
else
cout << ans << endl;
}
signed main() {
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}