poj 3170 Knights of Ni (bfs)
2015-07-13 09:48
447 查看
///从2开始先到4再到3的最小步数 ///vis开三维判断到4之前和到4之后是否访问过该点 # include <stdio.h> # include <algorithm> # include <string.h> # include <queue> using namespace std; int xx[4]={0,0,1,-1}; int yy[4]={1,-1,0,0}; struct node { int x; int y; int step; int flag; }; int n,m; int a[1010][1010]; int vis[1010][1010][2]; void bfs(int ax,int ay) { memset(vis,0,sizeof(vis)); node front,next; front.x=ax; front.y=ay; front.step=0; front.flag=0; vis[ax][ay][0]=1; queue<node>q; q.push(front); while(!q.empty()) { front=q.front(); q.pop(); if(a[front.x][front.y]==3&&front.flag==1) { printf("%d\n",front.step); return ; } for(int i=0;i<4;i++) { next.x=front.x+xx[i]; next.y=front.y+yy[i]; next.step=front.step+1; if(a[next.x][next.y]==4||front.flag==1) next.flag=1; else next.flag=0; if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&a[next.x][next.y]!=1&&!vis[next.x][next.y][next.flag]) { vis[next.x][next.y][next.flag]=1; q.push(next); } } } return ; } int main() { int i,j,ax,ay; while(~scanf("%d%d",&m,&n)) { for(i=0; i<n; i++) { for(j=0; j<m; j++) { scanf("%d",&a[i][j]); if(a[i][j]==2) { ax=i; ay=j; } } } bfs(ax,ay); } return 0; }
相关文章推荐
- plsql连接不上64位oracle11g的解决办法
- ZOJ 1973 Just Pour the Water(矩阵快速幂)
- 关于MATLAB中的tic toc的问题
- xposed系列教程
- js提取字符中数字
- 能够得到知名天使投资人的青睐本身就是一件值得夸耀的事情
- 网络爬虫(二) 网络爬虫基本原理
- Java中普通代码块,构造代码块,静态代码块的代码示例及区分
- sqlserver link-server的用法
- Geometric Distribution MIT
- PAT 数据结构 03-树3. Tree Traversals Again (25)
- POJ 3255 Roadblocks(Dijkstra)
- 如何在WebView中点击链接,使用自己的activity打开,不调用系统自带的浏览器
- 在ADF应用中,能够通过 oracle.adf.view.rich.security.FRAME_BUSTING 参数来使用framebusting功能。
- 一些android错误
- 5、VS2010+ASP.NET MVC4+EF4+JqueryEasyUI+Oracle该项目的开发——使用datagrid做报表
- Android--网络连接之HttpURLConnection和HttpClient
- 使用sqlitedatabase存取图片要注意的事项
- 使用Android studio中遇到的各种问题记录
- UVALive 6953 Digi Comp II