HDU 3137 No Left Turns(bfs)
来源:互联网 发布:mac禁用sleepimage 编辑:程序博客网 时间:2024/06/03 19:38
Description
给出一个n*m矩阵,’X’不能走,’ ‘可以走,’S’是起点,’F’是终点,问不左转的情况下从起点到终点所用最少步数是多少(保证路径存在)
Input
第一行为一整数T表示用例组数,每组用例第一行为两个整数n和m表示矩阵行列数(3< n,m<=20),之后为一n*m矩阵
Output
对于每组用例,输出不左转情况下从起点到终点所用最少步数
Sample Input
Sample Output
29
Solution
bfs,对于经过的每个点要记录其方向,用1,2,3,4分别表示向右,向下,向左和向上,然后每次将出队元素向右和向前走一步到达的点进队即可
Code
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<queue>using namespace std;#define maxn 22struct node{ int x,y,to,step;};int t,n,m,sx,sy,ex,ey,vis[5][maxn][maxn];char M[maxn][maxn];int bfs(){ memset(vis,0,sizeof(vis)); queue<node>que; node now,temp; temp.x=sx,temp.y=sy,temp.step=0; for(int i=1;i<=4;i++) { temp.to=i; que.push(temp); vis[i][sx][sy]=1; } while(!que.empty()) { now=que.front();que.pop(); int x1,y1,x2,y2,to; x1=x2=now.x,y1=y2=now.y; if(now.to==1)x1--,y2++,to=2; if(now.to==2)y1++,x2++,to=3; if(now.to==3)x1++,y2--,to=4; if(now.to==4)y1--,x2--,to=1; if(x1>=1&&x1<=n&&y1>=1&&y1<=m&&M[x1][y1]!='X'&&!vis[now.to][x1][y1]) { if(x1==ex&&y1==ey)return now.step+1; vis[now.to][x1][y1]=1; temp.x=x1,temp.y=y1,temp.to=now.to,temp.step=now.step+1; que.push(temp); } if(x2>=1&&x2<=n&&y2>=1&&y2<=m&&M[x2][y2]!='X'&&!vis[to][x2][y2]) { if(x2==ex&&y2==ey)return now.step+1; vis[to][x2][y2]=1; temp.x=x2,temp.y=y2,temp.to=to,temp.step=now.step+1; que.push(temp); } }}int main(){ scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); getchar(); for(int i=1;i<=n;i++) { gets(M[i]+1); for(int j=1;j<=m;j++) if(M[i][j]=='S')sx=i,sy=j; else if(M[i][j]=='F')ex=i,ey=j; } int ans=bfs(); printf("%d\n",ans); } return 0;}
0 0
- HDU 3137 No Left Turns(BFS)
- HDU 3137 No Left Turns(bfs)
- hdu 3137 No Left Turns bfs
- Sicily--1471. No Left Turns(BFS)
- 【搜索】 HDU 3137 No Left Turns
- HDU 2782 The Worm Turns (暴力dfs)
- hdu 2782 The Worm Turns
- HDU 2782 The Worm Turns (DFS)
- HDU 1072(BFS)
- HDU 1429(BFS )
- hdu 3345 (BFS)
- hdu 2425 (BFS)
- HDU 1728(BFS)
- hdu~2612(bfs)
- hdu~1253(bfs)
- hdu~1240(bfs)
- hdu~1548(bfs)
- hdu 5012(bfs)
- android studio 9patch图
- Sublime Text 2/3 Markdown Preview
- case when then 中判断null的方法
- activemq 队列消息定时清理
- 基于MFC的ActiveX控件开发
- HDU 3137 No Left Turns(bfs)
- 个人学习-java-session-验证码提交
- cocos2d-x在eclipse上搭建开发环境(全网最标准方法,不要cywin)
- Ubuntu系统安装完后修改目录空间大小
- 华为开发者联盟安卓Push Demo无法接收消息的解决
- 欢迎使用CSDN-markdown编辑器
- PhoneGap/Cordova学习笔记--5.添加事件处理
- sdwebImage 导入问题
- iptables sport 和dport的理解