I'm stuck! ccf模拟题。
ccf模拟题。
I’m stuck!
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述
给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思:
'#': 任何时候玩家都不能移动到此方格;
'+': 当玩家到达这一方格后,下一步可以向上下左右四个方向相邻的任意一个非'#'方格移动一格;
'-': 当玩家到达这一方格后,下一步可以向左右两个方向相邻的一个非'#'方格移动一格;
'|': 当玩家到达这一方格后,下一步可以向上下两个方向相邻的一个非'#'方格移动一格;
'.': 当玩家到达这一方格后,下一步只能向下移动一格。如果下面相邻的方格为'#',则玩家不能再移动;
'S': 玩家的初始位置,地图中只会有一个初始位置。玩家到达这一方格后,下一步可以向上下左右四个方向相邻的任意一个非'#'方格移动一格;
'T': 玩家的目标位置,地图中只会有一个目标位置。玩家到达这一方格后,可以选择完成任务,也可以选择不完成任务继续移动。如果继续移动下一步可以向上下左右四个方向相邻的任意一个非'#'方格移动一格。
此外,玩家不能移动出地图。
请找出满足下面两个性质的方格个数:
1. 玩家可以从初始位置移动到此方格;
2. 玩家不可以从此方格移动到目标位置。
输入格式
输入的第一行包括两个整数R 和C,分别表示地图的行和列数。(1 ≤ R, C ≤ 50)。
接下来的R行每行都包含C个字符。它们表示地图的格子。地图上恰好有一个'S'和一个'T'。
输出格式
如果玩家在初始位置就已经不能到达终点了,就输出“I'm stuck!”(不含双引号)。否则的话,输出满足性质的方格的个数。
样例输入
5 5
--+-+
..|#.
..|##
S-+-T
####.
样例输出
2
样例说明
如果把满足性质的方格在地图上用'X'标记出来的话,地图如下所示:
--+-+
..|#X
..|##
S-+-T
#include<bits/stdc++.h>
int xx[5]={1,-1,0,0};
int yy[5]={0,0,1,-1};
int vis[51][51];
int can[51][51];
char a[51][51];
int r,c;
int flag;
int counter;
void bfs(int x,int y)
{int dx,dy,rear,front;rear=front=0;while(front<=rear){ if(a[x][y]=='+'||a[x][y]=='S'||a[x][y]=='T'){for(int i=0;i<4;i++){dx=x+xx[i];dy=y+yy[i];if(dx>=0&&dx<r&&dy>=0&&dy<c&&a[dx][dy]!='#'&&vis[dx][dy]!=1){vis[dx][dy]=1;if(flag==0&&a[dx][dy]=='T')counter++;if(flag)can[dx][dy]=1;bfs(dx,dy);rear++;}}}else if(a[x][y]=='-'){for(int i=2;i<4;i++){dx=x+xx[i];dy=y+yy[i];if(dx>=0&&dx<r&&dy>=0&&dy<c&&a[dx][dy]!='#'&&vis[dx][dy]!=1){ if(flag)can[dx][dy]=1;if(flag==0&&a[dx][dy]=='T')counter++;vis[dx][dy]=1;bfs(dx,dy);rear++;}}}else if(a[x][y]=='|'){for(int i=0;i<2;i++){dx=x+xx[i];dy=y+yy[i];if(dx>=0&&dx<r&&dy>=0&&dy<c&&a[dx][dy]!='#'&&vis[dx][dy]!=1){ vis[dx][dy]=1;if(flag)can[dx][dy]=1;if(flag==0&&a[dx][dy]=='T')counter++;bfs(dx,dy);rear++;}}}else if(a[x][y]=='.'){dx=x+xx[0];dy=y+yy[0];if(dx>=0&&dx<r&&dy>=0&&dy<c&&a[dx][dy]!='#'&&vis[dx][dy]!=1){ if(flag)can[dx][dy]=1;if(flag==0&&a[dx][dy]=='T')counter++;vis[dx][dy]=1;bfs(dx,dy);rear++; } }front++;}
return;
}
int main()
{int x_e,x_s,k1=51,k2=51;scanf("%d %d",&r,&c);memset(vis,0,sizeof(vis));memset(can,0,sizeof(can));for(int i=0;i<r;i++){scanf("%s",&a[i]);}flag=1;for(int i=0;i<r;i++){for(int j=0;j<c;j++){ if(a[i][j]=='S'){vis[i][j]=1;bfs(i,j);}}}flag=0;int ans=0;bfs(0,2);
for(int i=0;i<r;i++)
{for(int j=0;j<c;j++){if(can[i][j]==1&&a[i][j]!='T'&&a[i][j]!='S'){ memset(vis,0,sizeof(vis));ans++;bfs(i,j);}if(a[i][j]=='T'){k1=i;k2=j;}}
}if(can[k1][k2]==1)printf("%d",ans-counter);elseprintf("I'm stuck!");
}
####X
一开始少了一个vis[dx][dy]=1;30分后来改过来了90分然后才发现我没判断I’m stuck!的条件所幸很简单我又加上了。我觉得我的代码比网上大多数都好理解吧。虽然有点长。
说一下思路吧,一开始时判断能从S到达的点,并把这些点做标记。就是can数组。后来在从被标记的点出发,看他能不能到T点,能的话counter加一。最后再用标记的点个数的总数减去那些能到T的点。i'm stuck的条件也很好判断,当我再给那些点做标记的时候如果T点没标记的话证明从s出发不能到T;
I'm stuck! ccf模拟题。相关推荐
- CCF模拟题——有趣的数详解
马上就要参加CCF认证考试了,然后最近就在做CCF上的模拟题,我选的语言是java,然后遇到第四题--有趣的数,当时一看题目,卧槽太TM简单了,比第一题和第二题还简单,高兴死我了,然后我就做呗,然后我 ...
- CCF模拟题-1~5
报名第九次CCF认证,是为了能参加第二届的CCSP,做了一下题库里的C\C++模拟,发现真是够水了-- 前三题,过于简单,不再赘述,发一下题目和对应答案~~~ 出现次数最多的数 #include &l ...
- CCF 模拟题 有趣的数 (数位DP)
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...
- CCF 模拟题,公共钥匙盒
题目描述: 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒 ...
- CCF CSP 201609-2 火车购票(C++语言100分)[简单模拟题]
1. 问题链接:CCF 201609-2 火车购票 试题编号: 201609-2 试题名称: 火车购票 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请实现一个铁路购票系统的 ...
- 重庆社区计算机考试题库,2020重庆社区工作者考试题库:模拟题100题(64)
2020年重庆社区工作者考试正在如火如荼的开展,为了帮助大家做好备考工作,社区工作者考试模拟题,希望考生们能与小编共同坚持--每日一练! 2020年社区工作者考试模拟题100题64 1. 在市场经济条 ...
- 计算机一级考试模拟题函数,2015年计算机一级考试模拟题(四)
2015年计算机一级考试模拟题(四) 请用Word 2003对考生文件夹下WORD.DOC文档中的文字进行编辑.排版和保存,具体要求如下: (1)将标题段("十年后的家电")文字设 ...
- java格林认证_Java考试格林模拟题
Java考试格林模拟题 question 14) which of the following lines of code will compile without error 1) int i=0; ...
- 计算机应用a级考试,四川省职称计算机应用能力考试A级模拟题
内容简介: 四川省职称计算机应用能力考试A级模拟题 一.单选题: 1.软件工程管理是指对(C)一切活动的管理. A.软件计划期 B.高级决策层 C.软件生命期 D.软件计划和开发期 2.从一个长度为n ...
最新文章
- python在线编辑器编译excel_python在线编译器的简单原理及简单实现代码
- 零基础学python需要多久-零基础学python大概要多久
- python调用api应用接口_第三方免费快递物流查询接口平台(快递鸟)api接口调用...
- mac上配置php开发环境,Mac配置PHP开发环境
- 生日蜡烛——第七届蓝桥杯C语言B组(省赛)第二题
- 腾讯offer是什么样子_月薪35K:2020腾讯Java后端开发详细面试流程
- [置顶] Z-STACK之OSAL_Nv非易失性存储解读上
- G1刷机问题 E:error status=7
- 通过子类化创建新的层和模型
- UNSW-论文以及博士论文下载
- mysql某个表被行锁了_MySQL 行锁和表锁的含义及区别详解
- 是时候了,我们需要前端架构师
- node.js的C++入门
- c语言用fun函数求最大公约数,C语言用函数求最大公约,最小公约数
- IR2104驱动原理
- python:实现DES和3DES加解密算法(附完整源码)
- supervisor> restart bili:create_bili_index bili:create_bili_index: ERROR (not running) bili:create_b
- 如何学习一门计算机语言
- c语言API用法 查询
- 四分之一A4纸大小的相纸打印该怎么选择