博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P3818 小A和uim之大逃离 II
阅读量:6690 次
发布时间:2019-06-25

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

bfs拓展嘛。

不过这里有一点特别之处,就是记录状态时要三维,f[i][j][0/1],代表到了(i , j)这个点是否使用过向量。
在bfs中往四面走,如果没有使用过向量,就再拓展一下使用向量的。(还是比较容易啦)

#include
#include
#include
#include
#include
#include
#define LL long longusing namespace std;int n,m,D,R;int a[1001][1001];bool f[1001][1001][2];struct H{ int x,y,flag,step;};int dx[]={ 0,0,1,-1},dy[]={ 1,-1,0,0}; int bfs(){ queue
q; q.push((H){ 1,1,0,0}); f[1][1][0]=1; while(!q.empty()) { H k=q.front();q.pop(); if(k.x==n&&k.y==m) return k.step; for(int i=0;i<4;i++) { int x=k.x+dx[i],y=k.y+dy[i]; if(x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]&&!f[x][y][k.flag]) { q.push((H){x,y,k.flag,k.step+1}); f[x][y][k.flag]=1; } } if(!k.flag){ int x=k.x+D,y=k.y+R; if(x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]&&!f[x][y][1]) { q.push((H){x,y,1,k.step+1}); f[x][y][1]=1; } } } return -1; }int main(){ scanf("%d%d%d%d",&n,&m,&D,&R); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ char c;cin>>c; if(c=='.') a[i][j]=1; } int ans=bfs(); printf("%d",ans); return 0;}

转载于:https://www.cnblogs.com/dfsac/p/7587831.html

你可能感兴趣的文章
数组多重筛选条件排序方法
查看>>
Vue中import引入模块路径时的@符号
查看>>
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
查看>>
sublime text 3插件
查看>>
Javascript优化后的加减乘除(解决js浮点数计算bug)
查看>>
js中的super小结
查看>>
ios显示或隐藏导航栏的底线
查看>>
包含 min 函数的栈
查看>>
rm -f /var/lib/rpm/__db*;rpm --rebuilddb
查看>>
iOS进公司后可能用到的开源库和第三方组件
查看>>
一篇文章,带你了解gulp
查看>>
前端基础知识复习之CSS
查看>>
命令模式与它在源码中的运用
查看>>
再和“面向对象”谈恋爱—面向对象编程概念
查看>>
jquery datatable + backbone 的重构。
查看>>
原型模式与深浅拷贝
查看>>
数据库之互联网常用分库分表方案
查看>>
个人理解emulateJSON作用 与java后台接口参数的关系
查看>>
浏览器同源策略和跨域请求
查看>>
js JSON对象属性
查看>>