当前位置: 首页 > news >正文

C语言基础题:迷宫寻路(C语言版)

1.题目描述


机器猫被困在一个矩形迷宫里。
迷宫可以视为一个n x m 矩阵,每个位置要么是空地,要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。
机器猫初始时位于(1,1)的位置,问能否走到(n,m)位置。

2.输入格式


第一行,两个正整数 n,m。
接下来几行,输入这个迷宫。每行输入一个长为 m 的字符串,#表示墙,. 表示空地。

3.输出格式


仅一行,一个字符串。如果机器猫能走到(n,m),则输出 Yes;否则输出 No 。

4.输入输出样例

1.输入:
3 5
.##.#
.#...
...#.
2.输出:
Yes

5.说明/提示


样例解释
路线如下:(1,1)→(2,1)→(3,1)→(3,2)→(3,3)→(2,3)→(2,4)→(2,5)→(3,5)

数据规模与约定
对于 100% 的数据,保证1< n,m < 100,(1,1)和(n,m)均为空地。

代码:

#include <stdio.h>
#include <stdlib.h>#define MAXN 1000typedef struct {int x, y;
} Point;int n, m;
char maze[MAXN][MAXN + 1];
int visited[MAXN][MAXN]; // 访问标记
Point queue[MAXN * MAXN]; // 队列用于 BFS
int front = 0, rear = 0;// 移动方向:上下左右
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};void enqueue(Point p) {queue[rear++] = p;
}Point dequeue() {return queue[front++];
}int is_valid(int x, int y) {return (x >= 0 && x < n && y >= 0 && y < m && maze[x][y] == '.' && !visited[x][y]);
}int bfs() {enqueue((Point){0, 0}); // 从 (0,0) 开始visited[0][0] = 1; // 标记为已访问while (front < rear) {Point current = dequeue();// 如果到达终点 (n-1, m-1)if (current.x == n - 1 && current.y == m - 1) {return 1; // 可到达}// 检查四个方向for (int i = 0; i < 4; i++) {int new_x = current.x + dir[i][0];int new_y = current.y + dir[i][1];if (is_valid(new_x, new_y)) {visited[new_x][new_y] = 1; // 标记为已访问enqueue((Point){new_x, new_y}); // 入队}}}return 0; // 不可到达
}int main() {scanf("%d %d", &n, &m);// 读取迷宫for (int i = 0; i < n; i++) {scanf("%s", maze[i]);}// 如果起点或终点是墙,直接输出 Noif (maze[0][0] == '#' || maze[n-1][m-1] == '#') {printf("No\n");return 0;}// 执行 BFSif (bfs()) {printf("Yes\n");} else {printf("No\n");}return 0;
}

http://www.lryc.cn/news/414582.html

相关文章:

  • 力扣-1两数之和2两数相加-2024/8/3
  • 简站WordPress主题 专业的WordPress建站服务商
  • Final Shell for Mac 虚拟机连接工具【简单易操作,轻松上手】【开发所需连接工具】
  • Oracle JDK:版本、支持与许可
  • 大模型学习笔记 - LLM 之RLHF人类对齐的简单总结
  • 【从零开始一步步学习VSOA开发】 概述
  • 小程序背景图片无法通过 WXSS 获取
  • CC++内存魔术:掌控无形资源
  • 算法--初阶
  • 通过Java实现插入排序(直接插入,希尔)与选择排序(直接选择,堆排)
  • 大型分布式B2B2C多用户商城7.0企业版源码分享【java语言、方便二次开发】
  • C++的结构体、联合体、枚举类型(一)
  • 搭建高可用OpenStack(Queen版)集群(一)之架构环境准备
  • 通过Stack Overflow线程栈溢出的问题实例,详解C++程序线程栈溢出的诸多细节
  • LeetCode刷题笔记 | 3 | 无重复字符的最长子串 | 双指针 | 滑动窗口 | 2025兴业银行秋招笔试题 | 哈希集合
  • 验证cuda和pytorch都按照成功了
  • iOS开发如何自己捕获Crash
  • 雪花算法(Snowflake Algorithm)
  • 〖任务1〗ROS2 jazzy Linux Mint 22 安装教程
  • 图像增强:使用周围像素填充掩码区域
  • 给虚拟机Ubuntu扩展硬盘且不丢数据
  • Oracle(41)如何使用PL/SQL批量处理数据?
  • JavaEE 第2节 线程安全知识铺垫1
  • LeetCode Hot100 零钱兑换
  • 微信小程序接口实现语音转文字
  • [Spark Streaming] 读取 Kafka 消息, 插入到 MySQL
  • 精选3款国内wordpress 主题,建站首选
  • JavaScript之 Uint8Array 类型数组(solana pda场景中的大小端)
  • 《Windows API每日一练》24.1 WinSock简介
  • openwrt编译Dockerfile