计蒜客-大钉骑马走江湖
2016-12-02 20:20
281 查看
大钉骑马走江湖
题意:
样例输入
3 3
s..
…
..e
3 3
s#.
…
#.e
样例输出
4
-1
思路: 简单的广搜问题,用的STL 中的队列模板
题意:
样例输入
3 3
s..
…
..e
3 3
s#.
…
#.e
样例输出
4
-1
思路: 简单的广搜问题,用的STL 中的队列模板
#include<iostream> #include<queue> #include<cstring> using namespace std; int n,m; int i,j; int x0,y0,x_end,y_end,cout_; typedef struct Node { int ii; int jj; char c; int nn; }node; int dirc[2][8]={1,1,-1,-1,2,2,-2,-2,2,-2,2,-2,1,-1,1,-1}; node map[100][100]; bool visited[100][100]; void bfs() { int k; int a,b,cc,d; int step=0; queue<node>q; q.push(map[x0][y0]); node temp; visited[x0][y0]=true; while(!q.empty()) { temp=q.front(); q.pop(); for(k=0;k<8;k++) { a=temp.ii+dirc[0][k]; b=temp.jj+dirc[1][k]; if(a>0&&a<=n&&b>0&&b<=m&&!visited[a][b]) { cc=temp.ii+dirc[0][k]/2; d=temp.jj+dirc[1][k]/2; 4000 if(map[cc][d].c!='#'&&map[a][b].c!='#') { visited[a][b]=true; map[a][b].nn=temp.nn+1; if(map[a][b].c=='e') { cout<<map[a][b].nn<<endl; return ; } q.push(map[a][b]); } } } } cout<<-1<<endl; } int main() { char a; while(cin>>n>>m) { cout_=0; memset(visited,false,sizeof(visited)); for(i=1;i<=n;i++) for(j=1;j<=m;j++) { cin>>a; map[i][j].nn=0; map[i][j].c=a; map[i][j].ii=i; map[i][j].jj=j; if(map[i][j].c=='s') { x0=i; y0=j; } if(map[i][j].c=='e') { x_end=i; y_end=j; } } bfs(); } return 0; }
相关文章推荐
- 前端js书写规范和维护方案
- Easytoch使用方法
- python列表
- 51nod-1677 treecnt
- MySQL update Error Code: 1175
- matlab 控件之间通过GUI Data传递数据
- Java与C++面向对象不同点
- 关于企业号后台的一些零碎使用
- Java运行时异常与普通异常的区别
- 详解mysql数据库的左连接、右连接、内连接的区别
- xacml开源代码
- 堆排序原理及算法实现(最大堆)
- matlab—图像显示
- 新手学习网页布局的小技巧!
- [基础训练]数列排序
- 第一个linux驱动_读写设备文件(2)
- (第十三周)Final Review会议
- POJ 1201 Intervals 差分约束系统
- 测试开发之----给你的apk加上时间分片的log记录
- Android Volley完全解析(一),初识Volley的基本用法