一次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. Exceptionless运用结果

    一.后台页面功能 列表菜单 SubmitLog - 记录一般日志 log Messages SubmitException - 记录一次日志 Exceptions SubmitNotFound - 4 ...

  2. Docker+Nginx使用流程(笔记)

    Docker+Nginx使用流程 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统 # uname -r 查看你当前的内核版本 # yum -y insta ...

  3. 流程控制-物流费用计算(嵌套if)

    题目描述 快递公司规定,如果物品体积超过2.5立方米,不允许快递.如果重量超过40kg,不允许快递.快递收费价格为: 小于等于1kg,一口价10块钱: 大于1kg,小于等于5kg,10块钱的基础上,每 ...

  4. hadoop搭建

    一.前期准备 1.1 静态ip,请查看虚拟机安装不放呢 1.2 hostname 以及 hosts文件修改 cat /etc/hostname 不同的机器设置不同的名字 cat /etc/hosts ...

  5. 逆元(inv)

    推荐博客 : http://blog.csdn.net/baidu_35643793/article/details/75268911 通常我们在计算除法取模时,并不能直接的取模后再去相除,答案会有问 ...

  6. Python判断一个字符串是否包含某个指定的字符串

    成员操作符 in str = "string test string test" find1 = "str" find2 = "test" ...

  7. 使用vscode运行python出现中文乱码的解决方法

    前提:自己安装了code runner的插件 快捷键Ctrl+Shift+P,打开设置Open Settings (JSON):

  8. 让你的 Linux 命令骚起来

    目录 管道符号 " | " grep sed awk sort comm uniq tr cat head tail wc find tsort tee 「>」重定向符号 「 ...

  9. 小白学Java:奇怪的RandomAccess

    目录 小白学Java:奇怪的RandomAccess RandomAccess是个啥 forLoop与Iterator的区别 判断是否为RandomAccess 小白学Java:奇怪的RandomAc ...

  10. 利用 sklearn 生成交叉特征:

    ------------------------------------- ------------------------------------- ------------------------ ...