博客
关于我
【纪中2020.2.19日】模拟赛题解
阅读量:323 次
发布时间:2019-03-03

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

为了解决这个问题,我们需要判断给定的地图是否存在死胡同。死胡同的定义是,从任意一个路面单元格出发,沿着任何一个可行的方向,都能返回到起点而不需要掉头。因此,我们需要检测地图中是否存在环路。

方法思路

我们可以使用广度优先搜索(BFS)来检测是否存在环路。具体步骤如下:

  • 遍历地图中的每个路面单元格。
  • 对于每个路面单元格,使用BFS进行深度优先搜索,检查是否存在环路。
  • 如果在BFS过程中发现一个单元格已经被访问过并且不是当前单元格的父节点,则说明存在环路。
  • 如果存在至少一个环路,则地图有死胡同,输出1;否则输出0。
  • 解决代码

    #include 
    #include
    using namespace std;bool has_cycle(int R, int C, char grid[R+1][C+1], int i, int j, vector
    >& parent, vector
    & visited) { queue
    > q; visited[i][j] = true; q.push({i, j}); parent[i][j] = make_pair(-1, -1); int dx[] = {0, 0, 1, -1}; int dy[] = {1, -1, 0, 0}; while (!q.empty()) { auto curr = q.front(); q.pop(); int x = curr.first; int y = curr.second; for (int k = 0; k < 4; ++k) { int nx = x + dx[k]; int ny = y + dy[k]; if (nx < 1 || nx > R || ny < 1 || ny > C) continue; if (grid[nx][ny] != '.') continue; if (!visited[nx][ny]) { visited[nx][ny] = true; parent[nx][ny] = make_pair(x, y); q.push({nx, ny}); } else { if (parent[x][y].first != nx || parent[x][y].second != ny) { return true; } } } } return false;}int main() { freopen("okret.in", "r", stdin); freopen("okret.out", "w", stdout); int R, C; scanf("%d %d", &R, &C); char grid[R+1][C+1]; for (int i = 1; i <= R; ++i) { scanf(" %c", &grid[i][1]); for (int j = 2; j <= C; ++j) { scanf(" %c", &grid[i][j]); } } vector
    visited(R+2, false); vector
    > parent(R+2, make_pair(-1, -1)); bool f = true; for (int i = 1; i <= R; ++i) { for (int j = 1; j <= C; ++j) { if (grid[i][j] == '.') { if (!has_cycle(R, C, grid, i, j, parent, visited)) { continue; } else { f = false; break; } } } if (!f) break; } if (f) { cout << 0; } else { cout << 1; }}

    代码解释

  • 读取输入:读取地图的大小R和C,然后读取地图数据。
  • 初始化数组:创建两个数组visitedparent来记录单元格的访问状态和父节点。
  • 遍历每个单元格:对于每个路面单元格,调用BFS函数进行环路检测。
  • BFS函数:从当前单元格出发,进行BFS,检查是否存在环路。如果存在环路,返回True。
  • 判断结果:如果存在环路,输出1,否则输出0。
  • 转载地址:http://dcim.baihongyu.com/

    你可能感兴趣的文章
    Node中同步与异步的方式读取文件
    查看>>
    Node中的Http模块和Url模块的使用
    查看>>
    Node中自启动工具supervisor的使用
    查看>>
    Node入门之创建第一个HelloNode
    查看>>
    node全局对象 文件系统
    查看>>
    Node出错导致运行崩溃的解决方案
    查看>>
    Node响应中文时解决乱码问题
    查看>>
    node基础(二)_模块以及处理乱码问题
    查看>>
    node安装及配置之windows版
    查看>>
    Node实现小爬虫
    查看>>
    Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
    查看>>
    Node提示:npm does not support Node.js v12.16.3
    查看>>
    Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
    查看>>
    Node服务在断开SSH后停止运行解决方案(创建守护进程)
    查看>>
    node模块化
    查看>>
    node环境下使用import引入外部文件出错
    查看>>
    node编译程序内存溢出
    查看>>
    Node读取并输出txt文件内容
    查看>>
    node防xss攻击插件
    查看>>
    noi 1996 登山
    查看>>