博客
关于我
AcWing-1101.献给阿尔吉侬的花束。
阅读量:133 次
发布时间:2019-02-27

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

阿尔吉侬是一只聪明的小白鼠,它擅长在迷宫中寻找最短路径。研究员们在迷宫中设置了一个终点,放置了一块阿尔吉侬最喜欢的奶酪。为了确定阿尔吉侬吃到奶酪所需的最少时间,我们需要使用广度优先搜索(BFS)算法来计算最短路径。

首先,我们需要读取输入数据。输入包括多个测试用例,每个测试用例包含一个R行C列的地图。地图中,'S'表示起点,'E'表示终点,'#'表示墙壁,'.'表示可以通行的格子。我们的任务是找到从'S'到'E'的最短路径。

对于每个测试用例,我们首先读取地图并标记起点和终点的位置。然后,我们使用BFS算法来探索迷宫。BFS算法通过逐层扩展,确保找到最短路径。每次从队列中取出当前位置,检查是否到达终点。如果没有到达终点,则检查四个方向(上、下、左、右)的相邻格子。对于每个相邻格子,如果它是通行的且未被访问过,我们标记它并将其添加到队列中。

如果在BFS过程中到达了终点,我们记录当前步数作为最短路径。如果无法到达终点,则输出“oop!”。

以下是实现代码:

#include 
using namespace std;int n, m, sx, sy, ex, ey;int dx[] = {0, 1, 0, -1};int dy[] = {1, 0, -1, 0};struct node { int x; int y; int step;};bool vis[N][N];int bfs() { queue
q; node p; p.x = sx; p.y = sy; p.step = 0; vis[p.x][p.y] = true; q.push(p); while (!q.empty()) { node xx = q.front(); q.pop(); if (xx.x == ex && xx.y == ey) { return xx.step; } for (int i = 0; i < 4; ++i) { int x1 = xx.x + dx[i]; int y1 = xx.y + dy[i]; if (x1 >= 0 && x1 < n && y1 >= 0 && y1 < m) { if (!vis[x1][y1] && a[x1][y1] != '#') { vis[x1][y1] = true; node p = {x1, y1, xx.step + 1}; q.push(p); } } } } return -1;}int main() { int t; cin >> t; for (; t--; ) { memset(vis, false, sizeof(vis)); cin >> n >> m; for (int i = 0; i < n; ++i) { string s; cin >> s; for (int j = 0; j < m; ++j) { if (s[j] == 'S') { sx = i; sy = j; } else if (s[j] == 'E') { ex = i; ey = j; } a[i][j] = s[j]; } } int h = bfs(); if (h != -1) { cout << h << endl; } else { cout << "oop!" << endl; } }}

这个代码首先读取输入数据,找到起点和终点的位置。然后使用BFS算法探索迷宫,计算最短路径。如果无法到达终点,输出“oop!”。该代码确保了在最坏情况下也能高效运行,适用于给定的数据范围。

转载地址:http://dumb.baihongyu.com/

你可能感兴趣的文章
nginx添加模块与https支持
查看>>
Nginx的Rewrite正则表达式,匹配非某单词
查看>>
Nginx的使用总结(一)
查看>>
Nginx的是什么?干什么用的?
查看>>
Nginx访问控制_登陆权限的控制(http_auth_basic_module)
查看>>
nginx负载均衡的五种算法
查看>>
Nginx配置ssl实现https
查看>>
Nginx配置TCP代理指南
查看>>
Nginx配置代理解决本地html进行ajax请求接口跨域问题
查看>>
Nginx配置参数中文说明
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
NI笔试——大数加法
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
Nmap扫描教程之Nmap基础知识
查看>>