一次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. 极光推送SDK通过泰尔终端实验室检测,符合统一推送接口标准

    1月7日,中国深圳--国内领先的开发者服务提供商极光(Aurora Mobile, NASDAQ:JG)宣布其旗下产品极光推送SDK通过中国信息通信研究院泰尔终端实验室的检测,其性能和接口标准符合统一 ...

  2. Serv_U FTP服务端使用教程

    Serv-U FTP Server是一种被广泛运用的FTP服务器端软件,可以设定多个FTP服务器.限定登录用户的权限.登录主目录及空间大小等,功能非常完备.具有非常完备的安全特性,支持SSl FTP传 ...

  3. floj 2264

    2.公路建设(highway.c/cpp/pas) 在滨海市一共有n 个城市,编号依次为1到n,它们之间计划修建m条双向道路,其中修建第i条道路的费用为ci. 海霸王作为滨海市公路建设项目的总工程师, ...

  4. RocketMQ客户端加载流程

     这节介绍RocketMQ客户端的启动流程,即Consumer和Producer的启动流程. 1. 客户端demo  首先先看下客户端的demo Producer: public class Sync ...

  5. Educational Codeforces Round 80 (Rated for Div. 2)

    A. Deadline 题目链接:https://codeforces.com/contest/1288/problem/A 题意: 给你一个 N 和 D,问是否存在一个 X , 使得 $x+\lce ...

  6. dp-最长回文串

    博客 : http://blog.csdn.net/hao_zong_yin/article/details/72730732 问题描述: 求一个序列中的最长回文串,这个串可以不连续 , 如  { 1 ...

  7. [bzoj3244] [洛谷P1232] [Noi2013] 树的计数

    Description 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序.两棵不同的树的DFS序有可能相同,并且它们的BFS序也有可能相同, ...

  8. [bzoj4827] [洛谷P3723] [Hnoi2017] 礼物

    Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是 ...

  9. mysql中更改字符集为utf8&&mysql中文输入不了问题解决

    写给TT:对不起啦!! 嗯,输入不了中文,大多数问题是mysql的字符集设置的问题,当然,别的问题也有可能, 这里我们用两种方法设置mysql的字符集,图形化工具和命令行的方式(一种操作完即可) 一, ...

  10. 【java面试】java和C/C++的区别

    1.内存分配 java中对内存的分配是动态的,JVM自动对内存进行扫描,对长期不用的空间作为"垃圾"进行收集,使得系统资源得到更充分地利用.按照这种机制,程序员不必关注内存管理问题 ...