HDU 1728(BFS)
来源:互联网 发布:php会员管理系统模板 编辑:程序博客网 时间:2024/06/14 18:10
点击打开链接
注意本题要求的是最小拐弯数,如果按照平常的做饭来,每次走过之后就把该点的mark值记为1,以后就不能在走了,但是之后可能出现拐弯数较小的。
比如
000000
011110
001000
100011
可能通过红色到绿色,也可能通过蓝色,但是明显通过红色先到,但是蓝色的拐弯少!!
注意输入的顺序!
#include"stdio.h"#include"string.h"#include"queue"using namespace std;int map[101][101];char str[101][101];int n,m,ex,ey,sx,sy,T,step;int d[4][2]={{0,1},{-1,0},{1,0},{0,-1}};struct node{ int x,y,step,dir;};void bfs(){ memset(map,50,sizeof(map)); queue<node>Q; node q,p; int k; q.x=sx; q.y=sy; q.step=0; q.dir=-1; map[q.x][q.y]=0; Q.push(q); while(!Q.empty()) { q=Q.front(); Q.pop(); for(k=0;k<4;k++) { p=q; p.x+=d[k][0]; p.y+=d[k][1]; if(p.x>=n||p.x<0||p.y>=m||p.y<0||str[p.x][p.y]=='*') continue; if(p.dir!=k&&p.dir!=-1) p.step++; if(p.step>step) continue; if(p.x==ex&&p.y==ey) { printf("yes\n"); return ; } if(map[p.x][p.y]>=p.step) { p.dir=k; map[p.x][p.y]=p.step; Q.push(p); } } } printf("no\n"); return ;}int main(){ int i; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(i=0;i<n;i++) scanf("%s",str[i]); scanf("%d %d %d %d %d",&step,&sy,&sx,&ey,&ex); sx--;sy--;ex--;ey--; if(sx==ex&&sy==ey) { printf("yes\n"); continue; } else bfs(); } return 0;}
- HDU 1728(BFS)
- HDU 1728 逃离迷宫(BFS)
- hdu 1728 逃离迷宫(BFS)
- hdu 1728 逃离迷宫(bfs)
- HDU 1728 逃离迷宫(BFS)
- hdu 1728 逃离迷宫(BFS)
- hdu 1728 逃离迷宫(BFS)
- HDU 1728 逃离迷宫(BFS)
- HDU 1728 逃离迷宫(BFS+DFS)
- HDU 1728 逃离迷宫 (BFS)
- hdu 1728 逃离迷宫(BFS)
- HDU 1728 逃离迷宫(BFS)
- hdu 1728 BFS
- HDU 1728 BFS
- hdu 1728 bfs
- hdu 1728 bfs
- HDU 1728(BFS)
- HDU 1072(BFS)
- 第二届国信蓝点模拟试题
- linux下拷贝整个目录
- 深入理解struts2的值栈(转)
- 黑马程序员_用反射方式执行某个类中的main方法
- Java中容易犯错的一个地方(转)
- HDU 1728(BFS)
- ireport使用教程(转)
- Words In Economics
- 用C++,调用浏览器打开一个网页
- boolean android.app.Activity.isFinishing()函数使用
- Some words that will shame on you if you misunderstood of them
- the use of nvl() in oracle
- Oracle 排序中常用的NULL值处理方法(转)
- CArray 剖析