文章

74

粉丝

0

获赞

94

访问

8.2k

头像
逃离迷宫 (bfs)题解:
P1681 中南大学机试题
发布于2025年8月30日 16:29
阅读数 12

#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] == '.') {
      ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发