TOJ 2470Robot in Maze (广度搜索应用)
2016-07-19 22:45
357 查看
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<memory.h> char map[200][200]; int visited[200][200][4]; //标识该位置是否被访问 int row,col; int sx[4]={-1,0,1,0}; int sy[4]={0,1,0,-1}; typedef struct Node{ int x; int y; int face; int step; }node; node s,e; node queue[160000]; int judge(int x,int y){ return x>=0&&x<row&&y>=0&&y<col&&map[x][y]!='#'; } int BFS(){ int i,j,k,top,tx,ty,ex,ey,face; ex=e.x; ey=e.y; queue[0]=s; visited[s.x][s.y][0]=1; top=1; for(i=0;i<top;i++){ //向前进 tx=queue[i].x+sx[queue[i].face]; ty=queue[i].y+sy[queue[i].face]; face=queue[i].face; if(judge(tx,ty)&&!visited[tx][ty][queue[i].face]){ queue[top].x=tx; queue[top].y=ty; queue[top].face=queue[i].face; queue[top].step=queue[i].step+1; visited[tx][ty][face]=1; if(map[tx][ty]=='T'){ return queue[top].step; } top++; } //向右转 tx=queue[i].x; ty=queue[i].y; face=(queue[i].face+1)%4; if(!visited[tx][ty][face]){ queue[top].x=tx; queue[top].y=ty; queue[top].face=face; queue[top].step=queue[i].step+1; visited[tx][ty][face]=1; if(map[tx][ty]=='T'){ return queue[top].step; } top++; } //向左转 tx=queue[i].x; ty=queue[i].y; face=(queue[i].face+3)%4; if(!visited[tx][ty][face]){ queue[top].x=tx; queue[top].y=ty; queue[top].face=face; queue[top].step=queue[i].step+1; visited[tx][ty][face]=1; if(map[tx][ty]=='T'){ return queue[top].step; } top++; } } return -1; } int main(){ int n,i,j,k; char c; scanf("%d",&n); while(n--){ scanf("%d%d",&row,&col); getchar(); for(i=0;i<row;i++){ for(j=0;j<col;j++){ c=getchar(); map[i][j]=c; if(map[i][j]=='S'){ s.x=i; s.y=j; } if(map[i][j]=='T'){ e.x=i; e.y=j; } } getchar(); } s.face=0; s.step=0; memset(visited,0,sizeof(visited)); printf("%d\n",BFS()); } return 0; }
相关文章推荐
- html css jquery怎么做开门的效果
- C代码:二分法求三次方程近似根
- 基础总结篇之一:Activity生命周期
- 浏览器地址栏运行HTML代码(谷歌)
- [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340
- Hadoop自学系列集(二) ---- CentOS下安装JDK
- NSData转byte数组(oc,C++混编)
- 数据结构---------红黑树
- Java学习笔记(21) sets and maps
- 面试题(1)
- 【算法-3】求100—999之间的水仙花数
- 如何在Apache 上配置 WebDAV 服务器
- python3常用的系统标准库
- hadoop jps 进程显示不全
- spring mvc 对jsonp的支持
- 对象的序列化以及反序列
- mysql事务
- Jackson基础笔记
- 日历一个小空间
- python3的面向对象