一次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. Redis 持久化的两种方案

    reids是一个key-value存储系统,为了保证效率,缓存在内存中,但是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,以保证数据的持久化. 所以:redis是一个支持持 ...

  2. spring boot事务管理

    spring boot集成事务十分的简单,只需要在启动类上面增加@EnableTransactionManagement注解,然后在需要实现事务的方法上添加@Transactional注解就可以了.下 ...

  3. Java中数组的使用

    1.声明数组 1.1声明一维数组 声明一维数组有下列两种格式: 数组的元素类型      数组名字[ ]; 数组的元素类型[ ]   数组名字 1.2声明二维数组 声明二维数组有下列两种格式: 数组的 ...

  4. 2016女生专场 ABCDEF题解 其他待补...

    GHIJ待补... A.HUD5702:Solving Order Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3276 ...

  5. 关于Itext 报错-java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable

    如果我们在用iText 做为java 为PDF 文档加水印的时候 报如下异常 java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1Enc ...

  6. Java类成员之代码块

    代码块含义:使用{ }括起来的代码 代码块类型: 1.局部代码块:定义在方法体中. 2.构造代码块:也叫初始化代码块,定义在类中方法体之外. 3.静态代码块:定义在类中方法体之外,被static修饰符 ...

  7. php进程 热更新

    后台启动的php守护进程时 文件内include的代码变更并未生效,需要重启进程,我们可以更新代码后手动重启.但是有些对失效要求较高.那就需要自动重启了.下面整理出三个方案用以实现. 1  inoti ...

  8. enum sizeof typedef分析

    1.枚举类型的使用方法 enum是C语言中的一种自定义类型 enum值是可以根据需要自定义的整型值 第一个定义的enum值默认为0 默认情况下的enum值是在前一个定义值的基础上加1 enum类型的变 ...

  9. Java架构师中的内存溢出和内存泄露是什么?实际操作案例!

    JAVA中的内存溢出和内存泄露分别是什么,有什么联系和区别,让我们来看一看. 01 内存泄漏 & 内存溢出 1.内存泄漏(memory leak ) 申请了内存用完了不释放,比如一共有 102 ...

  10. java类中元素初始化顺序

    结论:对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器. public class Test4 { @Tes ...