博客
关于我
【纪中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/

    你可能感兴趣的文章
    PowerDesigner使用教程:不显示背景网格
    查看>>
    PowerDesigner使用教程:创建数据模型以及导出
    查看>>
    PowerDesigner使用教程:右侧工具栏显示/隐藏
    查看>>
    PowerDesigner使用教程:导出sql文件以及解决中文乱码问题
    查看>>
    PowerDesigner使用教程:时间字段设置
    查看>>
    PowerDesigner使用教程:给字段添加唯一约束
    查看>>
    QGIS中怎样设置图层样式并导出地图样式
    查看>>
    PowerDesigner使用笔记
    查看>>
    QGIS中怎样实现数据坐标系转换
    查看>>
    PowerDesigner学习--基本步骤
    查看>>
    PowerDesigner导出Report通用报表
    查看>>
    PowerDesigner教程系列(二)概念数据模型
    查看>>
    Powerdesigner显示表的comment和列的comment的方法
    查看>>
    PowerDesigner最基础的使用方法入门学习
    查看>>
    PowerDesigner版本控制器设置权限
    查看>>
    PowerDesigner生成数据模型并导出报告
    查看>>
    QGIS中导入dwg文件并使用GetWKT插件获取绘制元素WKT字符串以及QuickWKT插件实现WKT显示在图层
    查看>>
    PowerDesigner逆向工程从SqlServer数据库生成PDM(图文教程)
    查看>>
    PowerEdge T630服务器安装机器学习环境(Ubuntu18.04、Nvidia 1080Ti驱动、CUDA及CUDNN安装)
    查看>>
    PowerPC-object与elf中的符号引用
    查看>>