博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客寒假算法基础集训营4 C:Applese 走迷宫(bfs)
阅读量:3900 次
发布时间:2019-05-23

本文共 1456 字,大约阅读时间需要 4 分钟。

【题目】

【题解】

简单搜索

【代码】

#include 
using namespace std;#define mem(a,b) memset(a,b,sizeof(a))char mp[105][105];int dx[]={0,1,0,-1};int dy[]={1,0,-1,0};int vis[105][105][2]={0};struct p{ int x,y,t,c;}f;int bfs(){ queue

q; q.push(f); vis[f.x][f.y][f.t]=1; while(!q.empty()) { f=q.front(); q.pop(); char ch=mp[f.x][f.y]; if(ch=='T') return f.c; else { if(ch=='@') { p ff ={f.x,f.y,!f.t,f.c+1}; if(!vis[ff.x][ff.y][ff.t]) { q.push(ff); vis[ff.x][ff.y][ff.t]=1; } } for(int i=0;i<4;i++) { p ff={f.x+dx[i],f.y+dy[i],f.t,f.c+1}; ch=mp[ff.x][ff.y]; if(ch!='#'&&!vis[ff.x][ff.y][ff.t]) { if((ch=='w'&&!ff.t)||(ch=='~'&&ff.t)) continue; else { q.push(ff); vis[ff.x][ff.y][ff.t]=1; } } } } } return -1;}int main(){ mem(mp,'#'); int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf(" %c",&mp[i][j]); if(mp[i][j]=='S') { f.x=i,f.y=j,f.t=0,f.c=0; } } } printf("%d\n",bfs()); return 0;}

 

转载地址:http://jfben.baihongyu.com/

你可能感兴趣的文章
数据结构之图(存储结构、遍历)
查看>>
使用sizeof计算类的大小
查看>>
乐观锁与悲观锁——解决并发问题
查看>>
operator 类型转换及重载
查看>>
HTTP状态码
查看>>
TCP/IP详解--举例明白发送/接收缓冲区、滑动窗口协议之间的关系
查看>>
TCP/IP详解--再次深入理解TCP网络编程中的send和recv
查看>>
TCP与UDP收发的时候TCP有缓冲区还是UDP有缓冲区,使用它们时该注意什么?
查看>>
C++中map、hash_map、unordered_map、unordered_set通俗辨析
查看>>
clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结
查看>>
运算符重载参数的顺序对运算是否有影响
查看>>
什么时候要用虚析构函数?
查看>>
序列化、反序列化与jsoncpp学习
查看>>
同步/异步与阻塞非阻塞的关系
查看>>
epoll模型讲解/源码分析
查看>>
ELF格式与bss段
查看>>
java继承 long和float小记点
查看>>
记录几点在开发中遇到的问题 2015-7-28 (会更新)
查看>>
网银在线的异步操作代码示意图
查看>>
火狐Firefox浏览器安装Selenium_IDE的步骤以及其使用规则
查看>>