一次bfs从起点开始找到起点能到达的点,一次bfs从终点开始找到能到终点的点,最后输出答案即可。

  刚开始写的时候,考虑找起点能到达的点的时候,用了dfs,提交只有20分,仔细想了一下,会存在无限循环的情况。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std; struct point{
int x,y;
}start,stop; char a[][];
int r,c,cango[][],canfrom[][],dir[][] = {{-,},{,},{,-},{,}}; void bfs1(point start)
{
queue<point> q;
q.push(start);
while(!q.empty())
{
int x = q.front().x,y = q.front().y;
q.pop();
if(x< || x>=r || y< || y>=c || a[x][y]=='#' || cango[x][y]) continue;
cango[x][y] = ;
if(a[x][y]=='S' || a[x][y]=='T' || a[x][y]=='+')
{
for(int i = ;i < ;i++)
{
point temp;
temp.x = x+dir[i][];
temp.y = y+dir[i][];
q.push(temp);
}
}
else if(a[x][y] == '-')
{
for(int i = ;i < ;i++)
{
point temp;
temp.x = x+dir[i][];
temp.y = y+dir[i][];
q.push(temp);
}
}
else if(a[x][y] == '|')
{
for(int i = ;i < ;i++)
{
point temp;
temp.x = x+dir[i][];
temp.y = y+dir[i][];
q.push(temp);
}
}
else
{
point temp;
temp.x = x+dir[][];
temp.y = y+dir[][];
q.push(temp);
}
}
} void bfs2(point stop)
{
queue<point> q;
q.push(stop);
while(!q.empty())
{
int x= q.front().x,y = q.front().y;
q.pop();
canfrom[x][y] = ;
for(int i = ;i < ;i++)
{ int xx = x+dir[i][],yy = y+dir[i][];
if(xx< || xx>=r || yy< || yy>=c || canfrom[xx][yy]) continue;
if(a[xx][yy]=='S' || a[xx][yy]=='T' || a[xx][yy]=='+' || i==&&a[xx][yy]=='.' || i<=&&a[xx][yy]=='|' || i>=&&a[xx][yy]=='-')
{
point temp;
temp.x = xx;
temp.y = yy;
q.push(temp);
}
}
}
}
int main()
{
scanf("%d%d",&r,&c);
getchar();
for(int i = ;i < r;i++) gets(a[i]);
for(int i = ;i < r;i++)
{
for(int j = ;j < c;j++)
{
if(a[i][j] == 'S') start.x = i,start.y = j;
else if(a[i][j] == 'T') stop.x = i,stop.y = j;
}
}
bfs1(start); if(!cango[stop.x][stop.y])
{
printf("I'm stuck!\n");
return ;
}
bfs2(stop);
int num = ;
for(int i = ;i < r;i++)
{
for(int j = ;j < c;j++)
{
if(cango[i][j] && !canfrom[i][j]) num++;
}
}
printf("%d\n",num); }

CCF_201312-5_I’m stuck!的更多相关文章

  1. 【刷题笔记】I'm stuck! (迷宫)-----java方案

    题目描述 : 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此 ...

  2. CCF I'm Stuck!

    问题描述 试题编号: 201312-5 试题名称: I'm stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', ...

  3. I’m stuck!(BFS)

    I’m stuck! 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能 ...

  4. CCF 201312-5 I’m stuck! (暴力,BFS)

    问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此方格 ...

  5. RMA Sales Order – Stuck with “Awaiting Return Disposition”

    RMA Sales Order – Stuck with "Awaiting Return Disposition"                     Action : (P ...

  6. I’m stuck!

    I’m stuck! 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候 ...

  7. CCF系列之I’m stuck!(201312-5)

    试题名称: I’m stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', ...

  8. My Stuck in C++

    My Stuck in C++ Zhong-Liang Xiang Oct. 1st, 2017 这个专题记录了对于我而言, c++迷一样的东西.

  9. kernel:NMI watchdog: BUG: soft lockup - CPU#6 stuck for 28s! CentOS7linux中内核被锁死

    环境说明:虚拟机 CentOS7中解压一个8G的包时,内核报错 Message from syslogd@cosmo-01 at Apr 25 11:05:59 ... kernel:NMI watc ...

  10. CentOS7运行报错kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 26s

    CentOS内核,对应的文件是/proc/sys/kernel/watchdog_thresh.CentOS内核和标准内核还有一个地方不一样,就是处理CPU占用时间过长的函数,CentOS下是watc ...

随机推荐

  1. ACWing 248. 窗内的星星|扫描线+懒惰标记

    传送门 题目描述 在一个天空中有很多星星(看作平面直角坐标系),已知每颗星星的坐标和亮度(都是整数). 求用宽为W.高为H的矩形窗户(W,H为正整数)能圈住的星星的亮度总和最大是多少.(矩形边界上的星 ...

  2. cc协议(知识共享,Creative Commons),程序员的基础守则之一

    知识共享 我在浏览git开源代码的时候,浏览到一句话: 版权声明:本文为CSDN博主「...」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:http ...

  3. Sample Codes之Query features from a FeatureLayer

    除了地图基本的放大缩小等功能,在webgis上的二次开发中,查询功能 通常作为需求的一部分需要我们去实现,今天就给大家详细的分析实例代码中的查询功能:Query features from a Fea ...

  4. 最近发现Git的速度好慢

    最近发现Git速度好慢,Git Bash要等5秒左右才能操作,网上查了查原因,说是火绒的问题,哎平时也用不到,看日志一个毒都没光顾过我电脑,火绒卸载! 卸了后果然快多了

  5. 求树上任意一点所能到达的最远距离 - 树上dp

    A school bought the first computer some time ago(so this computer's id is 1). During the recent year ...

  6. Java框架之SpringMVC 03-RequestMapping-请求数据-响应数据

    SpringMVC SpringMVC是一种轻量级的.基于MVC的Web层应用框架. 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口. 采用了松散耦合可插拔组件结构,比 ...

  7. AVR单片机教程——定时器中断

    本文隶属于AVR单片机教程系列.   中断,是单片机的精华. 中断基础 当一个事件发生时,CPU会停止当前执行的代码,转而处理这个事件,这就是一个中断.触发中断的事件成为中断源,处理事件的函数称为中断 ...

  8. git 工作实用创建删除分支

    一.创建分支 .创建本地分支并切换 git checkout -b dev_wt2 .创建切换并关联远程分支 git checkout -b dev_wt3 orgin/dev_wt3 .创建远程分支 ...

  9. pandas DF去重

    实例 import pandas as pd data=pd.DataFrame({'产品':['A','A','A','A'],'数量':[50,50,30,30]}) 去重 data.drop_d ...

  10. 安装Jupyter Notebook

    1.安装Ipython pip3 install -i https://pypi.douban.com/simple ipython 2.安装jupyter pip3 install -i https ...