CCF-I'm stuck!(BFS)
..|#.
..|##
S-+-T
####.
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <stdio.h>
#include <queue>
#define maxn 60
char mmap[maxn][maxn];
int vis[maxn][maxn]; //标记从起点出发
int vis1[maxn][maxn]; //标记从终点出发
int dy[4] = {0, 0, -1, 1}; //转向数组
int dx[4] = {1, -1, 0, 0};
int n, m;
int num[maxn][maxn][maxn][maxn];//记录一些路径
using namespace std;
struct Node//定义结构体
{
int x;
int y;
Node() {}
Node(int _x, int _y) {
x = _x;
y = _y;
}
} node[maxn];
Node st, ed;
int check(Node a)//节点是否合法
{
if(a.x >= 0 && a.x < n && a.y >= 0 && a.y < m && mmap[a.x][a.y] !='#') {
return 1;
}
return 0;
}
int get(char c, int& u, int& v)//判断当前可以走的方向
{
if(c == '-')
{
u = 2;
v = 4;
}
else if(c == '|')
{
u = 0;
v = 2;
}
else if(c == '.')
{
u = 0;
v = 1;
}
else
{
u = 0;
v = 4;
}
}
queue<Node>que;
int bfs()
{
while(!que.empty()) {
que.pop();
}
que.push(st); //从起点走
vis[st.x][st.y] = 1;
Node tmp, now;
while(!que.empty())
{
tmp = que.front();
que.pop();
int u, v;
get(mmap[tmp.x][tmp.y], u, v);
for(int i = u; i < v; i++)
{
now.x = tmp.x + dx[i];
now.y = tmp.y + dy[i];
if(check(now))
{
num[tmp.x][tmp.y][now.x][now.y] = 1;
if(!vis[now.x][now.y]) {
vis[now.x][now.y] = 1;
que.push(now);
}
}
}
}
if(vis[ed.x][ed.y] == 0)
{
puts("I'm stuck!");// 若未到达
return 0;
}
que.push(ed); //从终点走
while(!que.empty())
{
tmp = que.front();
que.pop();
for(int i = 0; i < 4; i++)
{
now.x = tmp.x + dx[i];
now.y = tmp.y + dy[i];
if(check(now) && vis1[now.x][now.y] == 0 && num[now.x][now.y][tmp.x][tmp.y])
{
vis1[now.x][now.y] = 1;
que.push(now);
}
}
}
int ans = 0;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
if(vis[i][j] == 1 && vis1[i][j] == 0)
{
ans++;
}
}
}
printf("%d\n", ans);
return 0;
}
int main()
{
scanf("%d %d", &n, &m);
memset(vis, 0, sizeof(vis));
memset(vis1, 0, sizeof(vis1));
memset(num, 0, sizeof(num));
for(int i = 0; i < n; i++)
{
scanf("%s", mmap[i]);
for(int j = 0; j < m; j++)
{
if(mmap[i][j] == 'S')
{
st.x = i;
st.y = j;
}
if(mmap[i][j] == 'T')
{
ed.x = i;
ed.y = j;
}
}
}
bfs();
return 0;
}
CCF-I'm stuck!(BFS)的更多相关文章
- CCF I'm Stuck!
问题描述 试题编号: 201312-5 试题名称: I'm stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', ...
- CCF 201312-5 I’m stuck! (暴力,BFS)
问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此方格 ...
- I’m stuck!(BFS)
I’m stuck! 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能 ...
- CCF模拟 I’m stuck!
I’m stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七 ...
- CCF系列之I’m stuck!(201312-5)
试题名称: I’m stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', ...
- CCF - CCSP 2018-01 绝地求生 BFS
BFS从安全地区方向搞一下就好了 1.还是注意每回合清空 2.posx居然开小了,可不能犯这种错误 3.地图用a和节点的dis重名了,建议其他变量禁止用a命名 4.在输入数据之前continue了,这 ...
- CCF 最优配餐 (BFS)
问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题. 栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的 ...
- Robots on a grid(DP+bfs())
链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=25585 Current Server Time: 2013-08-27 20:42:26 Ro ...
- I’m stuck!
I’m stuck! 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候 ...
随机推荐
- 阿里云centos7安装mysql8数据库
一.安装mysql 1. mysql官网查找仓库源镜像,选择downloads https://www.mysql.com/downloads/ 2. 找到社区版 3. 选择yum仓库 4. 选择对应 ...
- 什么时候使用Get请求/POST请求?
当请求无副作用时(如进行搜索),便可使用GET方法:当请求有副作用时(如添加数据行),则用POST方法. 一个比较实际的问题是:GET方法可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长 ...
- 风炫安全Web安全学习第十节课 数字型的Sql注入
数字型的Sql注入 风炫安全Web安全学习第十一节课 字符型和搜索型的sql注入 风炫安全Web安全学习第十二节课 mysql报错函数注入 风炫安全Web安全学习第十三节课 CUD类型的sql注入 风 ...
- Spring--AOP、通知的执行顺序
AOP执行顺序 如果我们在同一个方法自定义多个AOP,我们如何指定他们的执行顺序呢? 可以通过指定order,order越小越是最先执行. 配置AOP执行顺序的三种方式: 通过实现Ordered接口 ...
- java的重载与重写
原文链接http://zhhll.icu/2020/11/11/java%E5%9F%BA%E7%A1%80/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/%E9%87%8 ...
- C++题目东华
1. 定义一个点类Point,其有两个double型的私有数据成员x和y.此外还包含以下公有成员函数: (1)构造函数,给点初始化: (2)setPoint函数,设置点坐标值: (3)distance ...
- 【Java基础】面向对象中
面向对象中 这一章主要涉及面向对象的三大特征,包括封装.继承.多态.(抽象). 封装 程序设计追求"高内聚,低耦合": 高内聚 :类的内部数据操作细节自己完成,不允许外部干涉: 低 ...
- SonarQube学习(六)- SonarQube之扫描报告解析
登录http://192.16.1.105:9000,加载项目扫描情况 点击项目名称,查看报告总览 开发人员主要关注为[问题]标签页. 类型 主要关注为bug和漏洞. 其中bug是必须要修复的,漏洞是 ...
- DHCP最佳实践(一)
这是Windows DHCP最佳实践和技巧的最终指南. 如果您有任何最佳做法或技巧,请在下面的评论中发布它们. 在本指南(一)中,我将分享以下DHCP最佳实践和技巧. 不要将DHCP放在您的域控制器上 ...
- QPainter 绘制图像接口
阅读本文大概需要 3 分钟 我们在开发软件的过程中,绘制图像功能必不可少,使用 Qt 绘制图像时非常简单,只需要传递几个参数就可以实现功能,在 Qt 中绘制图像的 api有好几个 void drawI ...