HDOJ 1728 逃离迷宫(BFS,拐弯次数最少)
来源:互联网 发布:淘宝人气排名软件 编辑:程序博客网 时间:2024/04/28 10:39
HDOJ 1728
开始拿到这道题,想到先前写过的BFS,由出口到终点,最短路径。后来一看题目不是这个意思,题目要求拐弯数最少到达终点而不是求最短路径。
看了解题报告,有了一点点思路,就是先选定一条方向,然后把该方向上所有能拐的弯都拐了。也就是说,运动的方向不仅仅是周围的四个点,因为没求最短时间,为了避免BFS提前结束,就把四个方向搜索到底。
注意,这里记录拐弯数的K的初始值不是0而是-1,因为第一个选定的方向不算在内。
PS:这道题目好坑啊,题目给的x是列,y是行,为了方便自己理解,我在输入的时候特地先输入y后输入x,然后就可以当做正常理解的x,y。
然而这题卡我最多的是我没有memset,vis的数组没有初始化。。。。所以养成良好的编程习惯很重要,一定要初始化数组。
AC:
#include<iostream>#include<cstdio>#include<string.h>#include<queue>#include<algorithm>using namespace std;#define maxn 110struct node{ int x,y,d; //d存放之前已经拐弯次数};int x1,y1,x2,y2,k,n,m,t;char mp[maxn][maxn];bool vis[maxn][maxn];int dir[4][2]={1,0,-1,0,0,1,0,-1};void bfs(node vs,node vd){ int flag=0; node sta,end; queue<node > que; sta.x =vs.x; sta.y =vs.y ;sta.d=-1; //第一次之前-1 vis[vs.x][vs.y]=true; que.push (sta); while(!que.empty ()){ sta=que.front (); que.pop(); if(sta.x==vd.x && sta.y==vd.y && sta.d<=k){ flag=1;break; } end.d=sta.d+1; //前面搜完了一个方向肯定要拐弯 { int i; for(i=0;i<4;i++){ int nx=sta.x +dir[i][0]; int ny=sta.y+dir[i][1]; while(nx>=0 &&nx<n &&ny>=0 &&ny<m &&mp[nx][ny]!='*'){ if(!vis[nx][ny]){ end.x=nx; end.y=ny; que.push(end); vis[nx][ny]=true; } nx+=dir[i][0]; //单方向优先扩展 ny+=dir[i][1]; } } } } printf("%s\n",flag?"yes":"no");}int main(){ int i,j; cin>>t; while(t--){ node vs,vd; memset(vis,false,sizeof(vis));//初始化!! cin>>n>>m; for(i=0;i<n;i++){ for(j=0;j<m;j++){ cin>>mp[i][j]; } } cin>>k>>y1>>x1>>y2>>x2; vs.x=x1-1;vs.y=y1-1; vd.x=x2-1;vd.y=y2-1; bfs(vs,vd); } return 0;}
阅读全文
0 0
- HDOJ 1728 逃离迷宫(BFS,拐弯次数最少)
- HDOJ 1728 逃离迷宫(BFS + 记录拐弯次数)
- 【hdu 1728】 逃离迷宫 广搜(最少拐弯次数)
- hdu1728 逃离迷宫(bfs限制拐弯次数)
- hdu-1728逃离迷宫(dfs 求拐弯次数)
- hdoj 1728 逃离迷宫 【BFS 记录转弯次数】
- HDOJ-1728 逃离迷宫(BFS + 转弯)
- HDOJ 题目1728 逃离迷宫(BFS)
- HDOJ 1728 逃离迷宫(BFS)
- HDOJ 1728 逃离迷宫 (bfs)
- HDOJ 1728 逃离迷宫 (BFS)
- Hdoj 1728 逃离迷宫 【BFS】
- hdoj 1728 逃离迷宫 (BFS)
- hdoj 1728 逃离迷宫 [bfs]
- hdoj 1728 逃离迷宫【BFS】
- hdu1728逃离迷宫(bfs,拐弯问题)
- HDU 1728 逃离迷宫(BFS+转弯次数+转弯方向)
- HDOJ 1728 逃离迷宫 (BFS )解题报告
- HDU
- 如何用好JavaScript console
- 使用 HTML 、JavaScript 创建一个简单的计算器,包含加、减、乘、除四个功能
- ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件
- Java中的异常处理机制
- HDOJ 1728 逃离迷宫(BFS,拐弯次数最少)
- zabbix结局中文乱码问题
- C语言学习二:数据的表现形式及运算
- unique-binary-search-trees I&II
- adminlte JS报错,未定义(已解决)
- 重庆机场T3航站楼为什么设计成H型? 总设计师这样说
- Play framework自定义校验注释@CheckWith
- numpy入门——创建数组的其他方式
- Java Servlet重定向跟转发的不同点