[OpenJudge-NOI]走出迷宫 Bfs
2015-11-05 10:04
351 查看
代码
#include <cstdio> #include <cstring> #include <iostream> #include <queue> using namespace std; int n,m,ans,vis[1000][1000]; char mat[1000][1000],dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; ; struct Point{ int x,y,k; }; int Bfs(Point a,Point b) { queue<Point> q; q.push(a); vis[a.x][a.y]=1; Point top,next; //printf("%d %d\n%d %d\n",a.x,a.y,b.x,b.y); while(!q.empty()) { top=q.front();q.pop(); for(int i=0;i<4;i++){ next.x=top.x+dir[i][0]; next.y=top.y+dir[i][1]; next.k=top.k+1; //printf("%d %d %c\n",next.x,next.y,mat[next.x][next.y]); if(next.x==b.x&&next.y==b.y){ printf("%d",next.k); return 0; } if(next.x>=0&&next.x<n&&next.y>=0&&next.y<n&&vis[next.x][next.y]==0&&mat[next.x][next.y]=='.'){ q.push(next); vis[next.x][next.y]=1; } } } } int main() { memset(vis,0,sizeof(vis)); cin>>n>>m; Point s,t; for(int i=0;i<n;i++) { scanf("%s",mat[i]); } for(int i=0;i<n;i++) { for(int j=0;j<n;j++){ if(mat[i][j]=='S') { s.x=i; s.y=j; s.k=0; } if(mat[i][j]=='T') { t.x=i; t.y=j; } } } Bfs(s,t); //printf("%d",ans); return 0; }
相关文章推荐
- [OpenJudge-NOI]走迷宫 Bfs
- Linux如何根据UUID自动挂载磁盘分区
- linux下设置全局变量
- AOP基础--动态代理
- Android GPS学习笔记(1)—系统架构
- [No00003C]操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore
- RHCE 系列(四): 使用 Shell 脚本自动化 Linux 系统维护任务
- vmsata 监控命令详解
- 鸟哥的Linux私房菜(基础篇)- 鸟哥的第一本书的主要内容,以 Mandrake 9.0 为例
- 鸟哥的Linux私房菜(基础篇)- Red Hat 6.x旧文件
- Dubbo架构设计详解
- 鸟哥的Linux私房菜(基础篇)- 简易且较小安装Red Hat 7.2
- 鸟哥的Linux私房菜(基础篇)- 一个简单的 SPFdisk 分割实例
- 鸟哥的Linux私房菜(基础篇)- 一些基础的Linux 问题
- 鸟哥的Linux私房菜(基础篇)- 附录 B: EXT2 / EXT3 文件系统
- 鸟哥的Linux私房菜(基础篇)- 附录 A: GNU 的 GPL 条文 version 2
- 鸟哥的Linux私房菜(基础篇)- 第二十六章、Linux 核心编译与管理
- 鸟哥的Linux私房菜(基础篇)- 第二十五章、 Linux 备份策略
- 一些网站
- 增加tomcat连接数