双题解
2025-11-28 17:20:17
发布于:广东
4阅读
0回复
0点赞
深搜:
#include <bits/stdc++.h>
using namespace std;
int n, m, sx, sy, fx, fy;
char mp[50][50];
int vis[30][30];
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, -1, 1};
bool flag = 0;
void dfs (int x, int y) {
if (x == fx && y == fy) {
flag = 1;
return;
}
for (int i = 0;i < 4;i++) {
int nx = dx[i] + x;
int ny = dy[i] + y;
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && vis[nx][ny] == 0 && mp[nx][ny] == '.' ) {
vis[nx][ny] = 1;
dfs(nx, ny);
vis[nx][ny] = 0;
}
}
}
int main () {
cin >> n >> m >> sx >> sy >> fx >> fy;
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= m;j++) {
cin >> mp[i][j];
}
}
vis[sx][sy] = 1;
dfs(sx, sy);
if (flag) cout << "YES";
else cout << "NO";
return 0;
}
广搜:
#include <bits/stdc++.h>
using namespace std;
int n, m, sx, sy, fx, fy;
char mp[50][50];
int vis[50][50];
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, -1, 1};
struct node {
int x, y;
};
int main () {
cin >> n >> m >> sx >> sy >> fx >> fy;
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= m;j++) {
cin >> mp[i][j];
}
}
queue <node> q;
q.push({sx, sy});
vis[sx][sy] = 1;
while (q.size() > 0) {
node f = q.front();
q.pop();
for (int i = 0;i < 4;i++) {
int nx = dx[i] + f.x;
int ny = dy[i] + f.y;
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && vis[nx][ny] == 0 && mp[nx][ny] == '.' ) {
vis[nx][ny] = 1;
q.push({nx, ny});
}
}
if (f.x == fx && f.y == fy) {
cout << "YES";
return 0;
}
}
cout << "NO";
return 0;
}
这里空空如也






有帮助,赞一个