2018ICPC焦作 F. Honeycomb /// BFS
题目大意:
给定n m表示一共n行每行m个蜂巢
求从S到T的最短路径
input
1
3 4
+---+ +---+
/ \ / \
+ +---+ +---+
\ \ / \
+ + S +---+ T +
/ \ / /
+ +---+ + +
\ \ / \
+---+ +---+ +
/ /
+ +---+ + +
\ / \
+---+ +---+ +
\ / \ /
+---+ +---+
output
7
如图所示,其实只要按平常的走迷宫改变一下位移的格数就行了
改成一下的 上,下,左上,右上,左下,右下 的位移格数
如下位移格数,移动后为墙所在的位置,判断有没有墙即可判断能不能通过
int mov[][]={ {-,},{,},
{-,-},{-,},
{,-},{,} };
然后将每个蜂巢的中心点当做固定点,即要到达这个蜂巢就将坐标定位在这个蜂巢的中心点
这样就会发现,两个中心点的距离其实就是两倍位移格数
这个思路很好写 场上想复杂了 直接带偏队友思路 引以为戒a...
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int N=1e4+;
char G[N][N];
int n,m,stx,sty;
int mov[][]={ {-,},{,},
{-,-},{-,},
{,-},{,} };
struct NODE { int x,y,l; };
int bfs() {
queue <NODE> q;
q.push((NODE){stx,sty,});
while(!q.empty()) {
NODE e=q.front(); q.pop();
for(int i=;i<;i++) {
int x1=e.x+mov[i][];
int y1=e.y+mov[i][];
int x2=x1+mov[i][];
int y2=y1+mov[i][];
if(G[x1][y1]==' ' && G[x2][y2]=='T') return e.l+;
if(G[x1][y1]!=' ' || G[x2][y2]!=' ') continue;
G[x2][y2]='#';
q.push((NODE){x2,y2,e.l+});
}
}
return INF;
}
int main()
{
int t; scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
getchar();
n=n*+, m=m*+;
for(int i=;i<=n;i++) {
char ch; G[i][]=' '; int j=;
while(~scanf("%c",&ch)&&ch!='\n') {
G[i][j]=ch;
if(ch=='S') stx=i,sty=j;
j++;
} G[i][j]='\0';
}
int ans=bfs();
if(ans==INF) printf("-1\n");
else printf("%d\n",ans);
} return ;
}
2018ICPC焦作 F. Honeycomb /// BFS的更多相关文章
- icpc2018-焦作-F Honeycomb bfs
http://codeforces.com/gym/102028/problem/F 就是一个bfs,主要问题是建图,要注意奇数和偶数列的联通方案是略有不同的.比赛的时候写完一直不过样例最后才发现没考 ...
- Codeforces gym 100685 F. Flood bfs
F. FloodTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100685/problem/F Desc ...
- 焦作F Modular Production Line 费用流
题目链接 题解:这道题比赛的时候,学弟说是网络流,当时看N这么大,觉得网络流没法做,实际本题通过巧妙的建图,然后离散化. 先说下建图方式,首先每个覆盖区域,只有左右端点,如果我们只用左右端点的话,最多 ...
- 2018ICPC焦作 D-Keiichi Tsuchiya the Drift King /// 几何
题目大意: https://nanti.jisuanke.com/t/34142 有一个弯道抽象成圆的一部分 车子抽象成矩形 漂移过程中矩形上边会与圆的圆心在同一条直线上 以右上点贴着弯道边缘进行漂移 ...
- ICPC 2018 焦作区域赛
// 2019.10.7 练习赛 // 赛题来源:2018 ICPC 焦作区域赛 // CF链接:http://codeforces.com/gym/102028 A Xu Xiake in Hena ...
- ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)
//POJ3083 //DFS求靠左墙(右墙)走的路径长+BFS求最短路 //Time:0Ms Memory:716K #include<iostream> #include<cst ...
- 1128. Partition into Groups(图着色bfs)
1128 写的dfs貌似不太对 bfs重写 用bfs将图进行黑白染色 如果有超过一个与自己颜色相同的点 就把该点存入栈中 最后处理栈中的点 判断此点是否合法 不合法 取反 取反后再判断相邻点是否合法 ...
- USACO3.25Magic Squares(bfs)
/* ID: shangca2 LANG: C++ TASK: msquare */ #include <iostream> #include<cstdio> #include ...
- HDU ACM 1495 非常可乐(广搜BFS)
非常可乐 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
随机推荐
- Spring定时器的使用方法
Spring定时器主要通过Quartz Cron表达式来实现定时任务,注解用法如下: # 每月的最后1天 @Scheduled(cron = "0 0 18 28–31 * ?") ...
- 搭建hadoop集群 单机版
二.在Ubuntu下创建hadoop用户组和用户 这里考虑的是以后涉及到hadoop应用时,专门用该用户操作.用户组名和用户名都设为:hadoop.可以理解为该hadoop用户是属于一 ...
- 6-23 EDM的报告
EDM营销(Email Direct Marketing)也即:Email营销. 目的:数据分析.制定一对一的个性化数据.提高用户访问率.EDM是一对一的沟通,让你的用户感觉到尊重, 方式:选择强有力 ...
- AI应用在金融领域,如何能够在商业上有所突破
AI应用在金融领域,如何能够在商业上有所突破 如今,随着社会不断发展,技术不断进步,国内外各大金融机构已经在大数据.人工智能.区块链等新技术上有很多尝试,智能客服.智能投顾等新金融形式也早已不新鲜.那 ...
- 提升R代码运算效率的11个实用方法
提升R代码运算效率的11个实用方法 众所周知,当我们利用R语言处理大型数据集时,for 循环语句的运算效率非常低.有许多种方法可以提升你的代码运算效率,但或许你更想了解运算效率能得到多大的提升.本文将 ...
- prototype.原型链.原型链图
//1.几乎所有函数都有prototype属性,这个是个指针,指向原型对象;Function.prototype这个没有 //2.所有对象中都有__proto__属性.(Object.protot ...
- 通过Module读取寄存器的值
1: int eax; 2: _asm_("nop":"=a"(eax)); 3: printk("Get Eax Value:\n"); ...
- Django框架(七)—— 模板层:变量、过滤器、标签、自定义标签和过滤器
目录 模板层:变量.过滤器.标签.自定义标签和过滤器 一.模板层变量 1.语法 2.使用 二.模板层之过滤器 1.语法 2.常用过滤器 3.其他过滤器 三.模板值标签 1.for标签 2.if标签 3 ...
- 10种JavaScript特效实例让你的网站更吸引人
我们有三种主要的方法(从难到易):自己动手写脚本;使用类似于jQuery和mooTools的JavaScript框架(可以让编写代码变得更容易些);使用能工作于现有的JavaScript框架下的提前预 ...
- xinetd - 扩展的互联网服务守护进程
总览 SYNOPSIS xinetd [options] 描述 DESCRIPTION xinetd 执行与 inetd 相同的任务:它启动提供互联网服务的程序.与在系统初始化时启动这些服务器,让它们 ...