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模拟题。相关推荐

  1. CCF模拟题——有趣的数详解

    马上就要参加CCF认证考试了,然后最近就在做CCF上的模拟题,我选的语言是java,然后遇到第四题--有趣的数,当时一看题目,卧槽太TM简单了,比第一题和第二题还简单,高兴死我了,然后我就做呗,然后我 ...

  2. CCF模拟题-1~5

    报名第九次CCF认证,是为了能参加第二届的CCSP,做了一下题库里的C\C++模拟,发现真是够水了-- 前三题,过于简单,不再赘述,发一下题目和对应答案~~~ 出现次数最多的数 #include &l ...

  3. CCF 模拟题 有趣的数 (数位DP)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  4. CCF 模拟题,公共钥匙盒

    题目描述: 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒 ...

  5. CCF CSP 201609-2 火车购票(C++语言100分)[简单模拟题]

    1. 问题链接:CCF 201609-2 火车购票 试题编号: 201609-2 试题名称: 火车购票 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请实现一个铁路购票系统的 ...

  6. 重庆社区计算机考试题库,2020重庆社区工作者考试题库:模拟题100题(64)

    2020年重庆社区工作者考试正在如火如荼的开展,为了帮助大家做好备考工作,社区工作者考试模拟题,希望考生们能与小编共同坚持--每日一练! 2020年社区工作者考试模拟题100题64 1. 在市场经济条 ...

  7. 计算机一级考试模拟题函数,2015年计算机一级考试模拟题(四)

    2015年计算机一级考试模拟题(四) 请用Word 2003对考生文件夹下WORD.DOC文档中的文字进行编辑.排版和保存,具体要求如下: (1)将标题段("十年后的家电")文字设 ...

  8. java格林认证_Java考试格林模拟题

    Java考试格林模拟题 question 14) which of the following lines of code will compile without error 1) int i=0; ...

  9. 计算机应用a级考试,四川省职称计算机应用能力考试A级模拟题

    内容简介: 四川省职称计算机应用能力考试A级模拟题 一.单选题: 1.软件工程管理是指对(C)一切活动的管理. A.软件计划期 B.高级决策层 C.软件生命期 D.软件计划和开发期 2.从一个长度为n ...

最新文章

  1. python在线编辑器编译excel_python在线编译器的简单原理及简单实现代码
  2. 零基础学python需要多久-零基础学python大概要多久
  3. python调用api应用接口_第三方免费快递物流查询接口平台(快递鸟)api接口调用...
  4. mac上配置php开发环境,Mac配置PHP开发环境
  5. 生日蜡烛——第七届蓝桥杯C语言B组(省赛)第二题
  6. 腾讯offer是什么样子_月薪35K:2020腾讯Java后端开发详细面试流程
  7. [置顶] Z-STACK之OSAL_Nv非易失性存储解读上
  8. G1刷机问题 E:error status=7
  9. 通过子类化创建新的层和模型
  10. UNSW-论文以及博士论文下载
  11. mysql某个表被行锁了_MySQL 行锁和表锁的含义及区别详解
  12. 是时候了,我们需要前端架构师
  13. node.js的C++入门
  14. c语言用fun函数求最大公约数,C语言用函数求最大公约,最小公约数
  15. IR2104驱动原理
  16. python:实现DES和3DES加解密算法(附完整源码)
  17. supervisor> restart bili:create_bili_index bili:create_bili_index: ERROR (not running) bili:create_b
  18. 如何学习一门计算机语言
  19. c语言API用法 查询
  20. 四分之一A4纸大小的相纸打印该怎么选择

热门文章

  1. 错误提示没了_ESC错误排查-系统启动篇
  2. 2022-2028年中国交通建设PPP模式深度分析及发展战略研究报告(全卷)
  3. Go 知识点(12) — 类型转换以三方库 cast
  4. Vue 自定义权限指令
  5. 自然语言处理深度学习篇-BiLSTM文本挖掘实践 命名实体识别
  6. LeetCode简单题之数组元素积的符号
  7. TVM darknet yolov3算子优化与量化代码的配置方法
  8. VAE变分自编码器实现
  9. 使用卷积神经网络的自动心电图诊断
  10. ASIC设计-终极指南