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

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

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

#include<bits/stdc++.h>
using namespace std;
#define N 1000005
char mp[N];
int n,m;
struct Node{
int x,y;
Node(){}
Node(int x,int y):x(x),y(y){}
};
stack<Node>stk;
int vis[N],path[N];
int id(int i,int j){return (i-)*m+j;
} int main(){
cin>>n>>m;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("\n%c",&mp[id(i,j)]); stk.push(Node(,));
while(stk.size()){
Node c=stk.top();stk.pop();
int x=c.x,y=c.y;
if(vis[id(x,y)])continue;
vis[id(x,y)]=; if(x+<=n && y<=m && mp[id(x+,y)]=='.')
stk.push(Node(x+,y));
if(x<=n && y+<=m && mp[id(x,y+)]=='.')
stk.push(Node(x,y+));
} if(!vis[id(n,m)]){puts("");return ;} while(stk.size())stk.pop();
stk.push(Node(n,m));
while(stk.size()){
Node c=stk.top();stk.pop();
int x=c.x,y=c.y;
path[id(x,y)]++; if(x-> && y> && vis[id(x-,y)])
stk.push(Node(x-,y));
else if(x> && y-> && vis[id(x,y-)])
stk.push(Node(x,y-));
} while(stk.size())stk.pop();
stk.push(Node(n,m));
while(stk.size()){
Node c=stk.top();stk.pop();
int x=c.x,y=c.y;
path[id(x,y)]++; if(x> && y-> && vis[id(x,y-)])
stk.push(Node(x,y-));
else if(x-> && y> && vis[id(x-,y)])
stk.push(Node(x-,y));
}
for(int i=;i<=n;i++)
for (int j=;j<=m;j++){
if(i== && j==)continue;
if(i==n && j==m)continue;
if(path[id(i,j)]==){
puts("");
return ;
}
}
puts(""); }

网格图必经点+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. Vue.js(六)

    路由(用 Vue.js + Vue Router 创建单页应用) <script src="https://unpkg.com/vue-router/dist/vue-router.j ...

  2. ubuntu安装samba

    1,  sudo apt-get install samba sudo apt-get install smbclient 2,  vi /etc/samba/smb.conf 在最后加字段(为可读可 ...

  3. bzoj 3251

    http://www.lydsy.com/JudgeOnline/problem.php?id=3251 这道题在北京八十中的时候有人讲过.. 不过由于自己continue 写掉了一个所以调了很久. ...

  4. 数组转xls格式的excel文件&数据转csv格式的excle

    /** * 数组转xls格式的excel文件 * @param array $data 需要生成excel文件的数组 * @param string $filename 生成的excel文件名 * 示 ...

  5. GO 学习资源收集

     golang图书,在线阅读Go轻松学https://www.golang123.com/book/16 Go示例学https://www.golang123.com/book/17 Go Web 编 ...

  6. jquery给表格绑值

    jquery给表格绑值 直接上代码了 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  7. 卷积实现 python

    import sys h, w = input().strip().split() h = int(h) w = int(w) img = [] for i in range(h): line = s ...

  8. Django框架(十八)—— CBV源码分析、restful规范、restframework框架

    目录 CBV源码分析.restful规范.restframework框架 一.CBV源码分析 1.url层的使用CBV 2.as_view方法 3.view方法 4.dispatch方法(可以在视图层 ...

  9. 第六周实验总结&学习总结

    一.实验目的 (1)掌握类的继承方法 (2)变量的继承和覆盖,方法的继承,重载和覆盖实现 二.实验内容 源代码 package java2; import java.util.Scanner; cla ...

  10. 2019秋季学期第2周Java学习总结

    本周在第一周接触认识Java后对该编程语言有了进一步了解,明白了Java的类型:包括Application程序,Applet程序.知道了一个Java程序的关键字(public class).主方法(p ...