文章
74
粉丝
0
获赞
94
访问
8.2k
#include<bits/stdc++.h>
using namespace std;
int m, n;
int k, x1, y1, x2, y2;
char mp[105][105];
// 三维访问标记:x, y, 转弯次数
int vis[105][105][11];
bool flag = false;
// 四个方向:上下左右
int dirx[4] = {0, 0, 1, -1};
int diry[4] = {1, -1, 0, 0};
struct node{
int x, y;
int turn_cnt;
int dir; // 当前方向
};
void bfs() {
// 转换坐标:输入是(x列, y行),数组是[行][列]
int start_x = y1, start_y = x1;
int end_x = y2, end_y = x2;
// 起点或终点是障碍,直接返回
if(mp[start_x][start_y] == '*' || mp[end_x][end_y] == '*') return;
// 起点就是终点的情况
if(start_x == end_x && start_y == end_y) {
flag = true;
return;
}
memset(vis, 0, sizeof(vis));
queue<node> q;
// 初始可以选择四个方向出发,不算转弯
for(int i = 0; i < 4; i++) {
int dx = start_x + dirx[i];
int dy = start_y + diry[i];
if(dx >= 1 && dx <= m && dy >= 1 && dy <= n && mp[dx][dy] == '.') {
...
登录后发布评论
暂无评论,来抢沙发