先正着走一次把所有可行路径标记出来,然后倒着走两条路径,一条是能向下就向下的路径,另一条能向右就向右。

如果这两条路径相交,那么(1,1)-(n,m)路径上比有个必经点,把这个必经点封上,答案是1,如果没有必经点答案是2,如果(1,1)-(n,m)不连通,答案是0

直接用递归dfs会爆栈。所以要用栈来代替递归

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define N 1000005
  4. char mp[N];
  5. int n,m;
  6. struct Node{
  7. int x,y;
  8. Node(){}
  9. Node(int x,int y):x(x),y(y){}
  10. };
  11. stack<Node>stk;
  12. int vis[N],path[N];
  13. int id(int i,int j){return (i-)*m+j;
  14. }
  15.  
  16. int main(){
  17. cin>>n>>m;
  18. for(int i=;i<=n;i++)
  19. for(int j=;j<=m;j++)
  20. scanf("\n%c",&mp[id(i,j)]);
  21.  
  22. stk.push(Node(,));
  23. while(stk.size()){
  24. Node c=stk.top();stk.pop();
  25. int x=c.x,y=c.y;
  26. if(vis[id(x,y)])continue;
  27. vis[id(x,y)]=;
  28.  
  29. if(x+<=n && y<=m && mp[id(x+,y)]=='.')
  30. stk.push(Node(x+,y));
  31. if(x<=n && y+<=m && mp[id(x,y+)]=='.')
  32. stk.push(Node(x,y+));
  33. }
  34.  
  35. if(!vis[id(n,m)]){puts("");return ;}
  36.  
  37. while(stk.size())stk.pop();
  38. stk.push(Node(n,m));
  39. while(stk.size()){
  40. Node c=stk.top();stk.pop();
  41. int x=c.x,y=c.y;
  42. path[id(x,y)]++;
  43.  
  44. if(x-> && y> && vis[id(x-,y)])
  45. stk.push(Node(x-,y));
  46. else if(x> && y-> && vis[id(x,y-)])
  47. stk.push(Node(x,y-));
  48. }
  49.  
  50. while(stk.size())stk.pop();
  51. stk.push(Node(n,m));
  52. while(stk.size()){
  53. Node c=stk.top();stk.pop();
  54. int x=c.x,y=c.y;
  55. path[id(x,y)]++;
  56.  
  57. if(x> && y-> && vis[id(x,y-)])
  58. stk.push(Node(x,y-));
  59. else if(x-> && y> && vis[id(x-,y)])
  60. stk.push(Node(x-,y));
  61. }
  62. for(int i=;i<=n;i++)
  63. for (int j=;j<=m;j++){
  64. if(i== && j==)continue;
  65. if(i==n && j==m)continue;
  66. if(path[id(i,j)]==){
  67. puts("");
  68. return ;
  69. }
  70. }
  71. puts("");
  72.  
  73. }

网格图必经点+dfs——cf1214D的更多相关文章

  1. [CF963E]Circles of Waiting[高斯消元网格图优化+期望]

    题意 你初始位于 \((0,0)\) ,每次向上下左右四个方向走一步有确定的概率,问你什么时候可以走到 以 \((0,0)\)为圆心,\(R\) 为半径的圆外. \(R\le 50\) 分析 暴力 \ ...

  2. WPF 背景网格图

    利用DrawingBrush来画出背景网格图 <DrawingBrush Viewport="0,0,80,80" ViewportUnits="Absolute& ...

  3. 【HDOJ6218】Bridge(线段树,set,网格图,连通性)

    题意:给定一张2×n的网格图,一开始矩阵所有相邻点之间有一条边 有q个询问,每次给出两个相邻的点的坐标,将其中的边删除或者添加,问如此操作之后整张图的割边数量     n,q<=2*10^5, ...

  4. LOJ 546: 「LibreOJ β Round #7」网格图

    题目传送门:LOJ #546. 题意简述: 题目说的很清楚了. 题解: 将不包含起点或障碍物的连续的行或列缩成一行或一列,不会影响答案. 处理过后,新的网格图的行数和列数最多为 \(2k + 3\). ...

  5. 图-最短路-dijkstra-0/1BFS-1368. 使网格图至少有一条有效路径的最小代价

    2020-03-01 22:59:59 问题描述: 给你一个 m x n 的网格图 grid . grid 中每个格子都有一个数字,对应着从该格子出发下一步走的方向. grid[i][j] 中的数字可 ...

  6. 图的遍历DFS

    图的遍历DFS 与树的深度优先遍历之间的联系 树的深度优先遍历分为:先根,后根 //树的先根遍历 void PreOrder(TreeNode *R){ if(R!=NULL){ visit(R); ...

  7. 数据结构 《2》----基于邻接表表示的图的实现 DFS(递归和非递归), BFS

    图通常有两种表示方法: 邻接矩阵 和 邻接表 对于稀疏的图,邻接表表示能够极大地节省空间. 以下是图的数据结构的主要部分: struct Vertex{ ElementType element; // ...

  8. HDU 3036 Escape 网格图多人逃生 网络流||二分匹配 建图技巧

    题意: 每一个' . '有一个姑娘, E是出口,'.'是空地 , 'X' 是墙. 每秒钟每一个姑娘能够走一步(上下左右) 每秒钟每一个出口仅仅能出去一个人 给定n*m的地图, 时限T 问全部姑娘是否能 ...

  9. 图的遍历——DFS(矩形空间)

    首先,这里的图不是指的我们一般所说的图结构,而是大小为M*N的矩形区域(也可以看成是一个矩阵).而关于矩形区域的遍历问题经常出现,如“寻找矩阵中的路径”.“找到矩形区域的某个特殊点”等等之类的题目,在 ...

随机推荐

  1. 【leetcode】942. DI String Match

    题目如下: Given a string S that only contains "I" (increase) or "D" (decrease), let  ...

  2. 重磅 | 阿里云与MongoDB达成战略合作,成为全球唯一提供最新版MongoDB的云厂商

    MongoDB是业界最受欢迎的开源数据库之一,2019年一份面向开发者的数据库调查报告中,MongoDB以 24.6%的使用率占据次席. 阿里云是国内最早提供MongoDB服务的云厂商,提供完全兼容M ...

  3. Python--数据类型与变量(列表、元祖、字典)

    今天我们来看Python中3种內建的数据结构:列表.元祖和字典 列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素特性:1.可存放多个值2.可修改指定索引位置对应的值,可变 ...

  4. webpack 兼容低版本浏览器,转换ES6 ES7语法

    ES6,ES7真的太棒了,async +await+Promise,让我阅读代码的时候不用再从左拉到右了(异步太多,一层套一层真的太头痛) 但是有个问题,打包后低版本浏览器运行不了,还有我用了一些混淆 ...

  5. CDN技术之--该技术概述

    CDN关键技术:1. 缓存算法[Squid]:2. 分发能力:3. 负载均衡[Nginx](4. 基于DNS[BIND]):5. 支持协议: 缓存算法决定命中率.源服务器压力.POP节点存储能力分发能 ...

  6. (转)使用OpenGL显示图像(二)定义Shapes

    定义形状 编写:jdneo - 原文:http://developer.android.com/training/graphics/opengl/shapes.html 在一个OpenGL ES Vi ...

  7. 【Vue】---Vue.config常用配置项

    一.前言 Vue-cli3 搭建的项目 相比较Vue-cli2界面相对较为简洁,之前的build和config文件夹不见了,那么应该如何配置 如webpack等的配呢? 二.基本配置 只需要在项目的根 ...

  8. Django框架(二十三)—— Django rest_framework-解析器

    解析器 一.解析器的作用 根据请求头 content-type 选择对应的解析器对请求体内容进行处理,将传过来的数据解析成字典 二.使用解析器 1.局部使用 在视图类中重定义parser_classe ...

  9. spark sql数据源--hive

    使用的是idea编辑器 spark sql从hive中读取数据的步骤:1.引入hive的jar包 2.将hive-site.xml放到resource下 3.spark sql声明对hive的支持 案 ...

  10. Oracle查看有锁进程,删除锁

    查看锁表进程SQL语句1: select sess.sid,     sess.serial#,     lo.oracle_username,     lo.os_user_name,     ao ...