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'七个字符中的一个,分别表示如下意思: '#': 任何时候 ...
随机推荐
- 技术基础 | 监测Apache Cassandra的简明方式——MCAC
点击这里在GitHub上访问我们,以便深入了解DataStax的开源项目--Apache Cassandra指标收集器(Metric Collector for Apache Cassandra, o ...
- 读《白帽子讲web安全》 ——笔记
第二章 浏览器安全 什么是同源策略? 同源策略,它是由Netscape提出的一个著名的安全策略. 现在所有支持JavaScript 的浏览器都会dao使用这个策略. 所谓同源是指,域名,协议,端口相同 ...
- hive优化之小文件合并
文件数目过多,会给HDFS带来压力,并且会影响处理效率,可以通过合并Map和Reduce的结果文件来消除这样的影响: set hive.merge.mapfiles = true ##在 map on ...
- OpenWRT19.07_命令行_重拨wan_重启路由
OpenWRT19.07_命令行_重拨wan_重启路由 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-10-19. 写OpenWRT的脚本时,需要用到一些重启命令 以下的命令中的参 ...
- linux环境下oracle 11g 静默安装
安装环境 Linux服务器:oracle linux 6.6 64位 Oracle服务器:Oracle11gR2 64位 系统要求 1.Linux安装Oracle系统要求 系统要求 说明 内存 必须高 ...
- Laya Ts 简易对象池
ts版本的简易对象池 ,目前主要支持3D的物体,也可以将其改成其他类型 要使用首先调用InitPool 方法 `/* 使用说明: 使用必须先调用 InitPool 方法将对象池初始化 然后 Deque ...
- 【C++】《C++ Primer 》第八章
第八章 IO库 一.IO类 1. 标准库定义的IO类型 头文件 作用 类型 iostream 从标准流中读写数据 istream, wistream 从流读取数据 ostream, wostream ...
- 【Flutter】功能型组件之对话框详解
前言 对话框本质上也是UI布局,通常一个对话框会包含标题.内容,以及一些操作按钮,为此,Material库中提供了一些现成的对话框组件来用于快速的构建出一个完整的对话框. 接口描述 // 1. Ale ...
- 天梯赛练习 L3-008 喊山 (30分) bfs搜索
题目分析: 本题是一题比较简单的bfs搜索题,首先由于数据给的比较多不能直接开二维数组存放,而是用了vector的动态的二维数组的形式存放,对于每个出发点,我们bfs向四周搜索,标记搜索过的点,遇到搜 ...
- ansible 安装和使用
ansible 安装和使用 ## 安装epel 源: rpm -ivh https://dl.fedoraproject.org/pub/e ...