题目大意:

给定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 ;
}

最新文章

  1. thinkphp - 复合查询(or、and 联合使用的方法)
  2. Bootstrap响应式栅格系统的设计原理
  3. 装完RHEL7后,重新开机启动后显示:Initial setup of CentOS Linux 7 (core) 提示license报错
  4. C#中的 序列化和反序列化
  5. windows下的vimrc
  6. c++ 程序崩溃生成Dump文件
  7. 异常:android.os.NetworkOnMainThreadException
  8. RF:RF实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性—Jason niu
  9. laravel中及其常用的一些函数方法(自己看)和技巧(不断添加中)
  10. MG90S 舵机 使用方法 树莓派
  11. TexStudio + TexLive 修改字体大小
  12. [视频]K8飞刀 mysql注入点拿shell &amp; UDF提权教程
  13. centos7.2 开机启动脚本
  14. spring mvc 常见错误
  15. pandas数据处理攻略
  16. Django(request和response)
  17. 用python将MSCOCO和Caltech行人检测数据集转化成VOC格式
  18. php文件的处理和操作
  19. 【大数据系列】hadoop集群的配置
  20. [mysql] mysql如何实现更新一条记录中某个字段值的一部分呢?

热门文章

  1. python 拆分字符串(3.0)
  2. web跨域问题解决方案
  3. 利用Pycharm断点调试Python程序
  4. RabbitMQ使用(一)
  5. jQuery 事件委派
  6. 【转】Linux系统抓包命令tcpdump使用实例
  7. 并发编程(六)——进程/线程池、协程、gevent第三方库
  8. Java并发主要操作
  9. centos7下的nfs配置
  10. CSS3:FlexBox的详解