牛客网 - [北京信息科技大学第十一届程序设计竞赛]kotori和迷宫(BFS)
发布日期:2021-07-01 00:18:55 浏览次数:2 分类:技术文章

本文共 1669 字,大约阅读时间需要 5 分钟。

题目链接:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口。kotori只能上下左右四个方向移动。她想知道有多少出口是她能到达的,最近的出口离她有多远?

输入描述

第一行为两个整数n和m,代表迷宫的行和列数 (1≤n,m≤30)

后面紧跟着n行长度为m的字符串来描述迷宫。'k'代表kotori开始的位置,'.'代表道路,'*'代表墙壁,'e'代表出口。保证输入合法。

输出描述

若有出口可以抵达,则输出2个整数,第一个代表kotori可选择的出口的数量,第二个代表kotori到最近的出口的步数。(注意,kotori到达出口一定会离开迷宫)

若没有出口可以抵达,则输出-1。

输入

6 8

e.*.*e.*
.**.*.*e
..*k**..
***.*.e*
.**.*.**
*......e

输出

2 7

说明

可供选择坐标为[4,7]和[6,8],到kotori的距离分别是8和7步。

解题思路

题意:问能到达的出口数量和最近的出口距离。

思路:BFS。

Accepted Code:

#include 
using namespace std;const int inf = 0x3f3f3f3f;struct edge { int x, y, t;}p;char mp[35][35];int n, m, cnt = 0, min_ = inf, vis[35][35];int arr[4][2] = {
{1, 0}, {0, 1}, {0, -1}, {-1, 0}}; void BFS(int x, int y) { int tx, ty; queue
Q; Q.push((edge){x, y}); while (!Q.empty()) { p = Q.front(); Q.pop(); if (mp[p.x][p.y] == 'e') { cnt++; min_ = min(min_, p.t); continue; } for (int i = 0; i < 4; i++) { tx = p.x + arr[i][0]; ty = p.y + arr[i][1]; if (tx >= 0 && tx < n && ty >= 0 && ty < m && !vis[tx][ty] && mp[tx][ty] != '*'){ vis[tx][ty] = true; Q.push((edge){tx, ty, p.t + 1}); } } }}int main() { int ex, ey; scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf(" %c", &mp[i][j]); if (mp[i][j] == 'k') ex = i, ey = j; } } BFS(ex, ey); if (min_ < inf) printf("%d %d\n", cnt, min_); else printf("-1\n"); return 0;}

转载地址:https://lzyws739307453.blog.csdn.net/article/details/94549974 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:牛客网 - [北京信息科技大学第十一届程序设计竞赛]kotori和素因子(素筛+DFS)
下一篇:牛客网 - [北京信息科技大学第十一届程序设计竞赛]kotori和出道(规律)

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月16日 14时49分01秒