CCF_201312-5_I’m stuck!
一次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!的更多相关文章
- 【刷题笔记】I'm stuck! (迷宫)-----java方案
题目描述 : 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此 ...
- CCF I'm Stuck!
问题描述 试题编号: 201312-5 试题名称: I'm stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', ...
- I’m stuck!(BFS)
I’m stuck! 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能 ...
- CCF 201312-5 I’m stuck! (暴力,BFS)
问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此方格 ...
- RMA Sales Order – Stuck with “Awaiting Return Disposition”
RMA Sales Order – Stuck with "Awaiting Return Disposition" Action : (P ...
- I’m stuck!
I’m stuck! 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候 ...
- CCF系列之I’m stuck!(201312-5)
试题名称: I’m stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', ...
- My Stuck in C++
My Stuck in C++ Zhong-Liang Xiang Oct. 1st, 2017 这个专题记录了对于我而言, c++迷一样的东西.
- 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 ...
- CentOS7运行报错kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 26s
CentOS内核,对应的文件是/proc/sys/kernel/watchdog_thresh.CentOS内核和标准内核还有一个地方不一样,就是处理CPU占用时间过长的函数,CentOS下是watc ...
随机推荐
- list的基本方法
数据类型列表 列表的创建 使用[ ]创建列表,元素之间使用逗号隔开, list()创建列表 列表添加新的元素 list.append() 在list末尾增加一个元素 list.insert(n, &q ...
- JAVA读取yml配置文件指定key下的所有内容
先引入需要的依赖 <!--读取yml文件--> <dependency> <groupId>org.yaml</groupId> <artifac ...
- 道格拉斯-普克算法(JavaScript实现)
需求: 有时候当移动速度很慢,GPS定位的轨迹点就非常的多,这时候为了缩减数据量,需要将不突出的点去掉. 思路: (1) 在曲线首尾两点间虚连一条直线,求出其余各点到该直线的距离. (2)选其最大者与 ...
- 详细解析Java虚拟机的栈帧结构
欢迎关注微信公众号:万猫学社,每周一分享Java技术干货. 什么是栈帧? 正如大家所了解的,Java虚拟机的内存区域被划分为程序计数器.虚拟机栈.本地方法栈.堆和方法区.(什么?你还不知道,赶紧去看看 ...
- Yolo V3整体思路流程详解!
结合开源项目tensorflow-yolov3(https://link.zhihu.com/?target=https%3A//github.com/YunYang1994/tensorflow-y ...
- 小白学 Python 爬虫(42):春节去哪里玩(系列终篇)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 区间 dp
以一个经典题目引入到正题 : 有 n 堆石子 , 每两堆石子合并会花费一定的价值,所花费的价值即为 两堆石子上的价值和 , 问合并所有的石子后的最小花费 ? 思路分析 : 因为题干可以看成是对每个区间 ...
- map + 前缀和
B. Balanced Substring time limit per test 1 second memory limit per test 256 megabytes input standar ...
- LCA - 求任意两点间的距离
There are n houses in the village and some bidirectional roads connecting them. Every day peole alwa ...
- CheckStyle报错的常见问题及解决方式
CheckStyle报错的常见问题及解决方式 声明: 本文摘自百度文库.希望这篇文章提到的规范能对大家编程起到好的效果,此文不定期更新,将推出更加详尽的编程规范. 1 提示:Type is mis ...