当前位置: 首页 > 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;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 软设之网络诊断命令
  • JavaScript青少年简明教程:事件及处理
  • DevOps 相关知识点总结
  • 1037:计算2的幂
  • Python学习笔记51:暂停篇
  • 学生信息管理系统(Python+PySimpleGUI+MySQL)
  • 数据分析模型:洞察数据背后的奥秘
  • 秒懂Linux之gdb调试
  • Linux 进程优先级、程序地址空间、进程控制
  • 数据恢复的定制之旅:打造SQL Server的专属恢复方案
  • 如何将PyCharm 中使用 PDM 管理的 Django 项目迁移到 VS Code 并确保一切正常工作?
  • 非传统题练习(自用)
  • 界面控件DevExpress WinForms,支持HTML CSS提升用户体验(一)
  • 做 DL-FWI 研究需要哪些知识和能力
  • 超详细的 Linux Conda 环境安装教程
  • [LeetCode] Wiggle Sort
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Date型的使用
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTML5新特性总结
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • javascript 哈希表
  • PHP那些事儿
  • Python3爬取英雄联盟英雄皮肤大图
  • spring cloud gateway 源码解析(4)跨域问题处理
  • yii2中session跨域名的问题
  • 程序员该如何有效的找工作?
  • 给github项目添加CI badge
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 利用jquery编写加法运算验证码
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • -- 数据结构 顺序表 --Java
  • 突破自己的技术思维
  • 我这样减少了26.5M Java内存!
  • 因为阿里,他们成了“杭漂”
  • 原生js练习题---第五课
  • 最简单的无缝轮播
  • ​【已解决】npm install​卡主不动的情况
  • #前后端分离# 头条发布系统
  • #在 README.md 中生成项目目录结构
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (第30天)二叉树阶段总结
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (蓝桥杯每日一题)love
  • (转)关于多人操作数据的处理策略
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .gitignore
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net 简单实现MD5
  • .NET 指南:抽象化实现的基类
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET使用存储过程实现对数据库的增删改查