POJ 1915 Knight Moves 双向搜索
来源:互联网 发布:蜜桃tv源码程序 编辑:程序博客网 时间:2024/06/05 10:29
题意:经典的马步移动。问从一个点到另一个点的最短距离。
分析:直接DFS即可,这里用这题写个双向BFS练手。
Code:
#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;const int maxn=310;int vis[maxn][maxn];int dir[8][2]={{-2,1},{-2,-1},{2,1},{2,-1},{1,-2},{1,2},{-1,-2},{-1,2}};struct node{ int x,y; node(){} node(int xx,int yy):x(xx),y(yy){}};int n,cas,sx,sy,ex,ey;bool OK(int x,int y){ if(x>=0&&x<n&&y>=0&&y<n) return true; return false;}int bfs(){ if(sx==ex&&sy==ey) return 0; queue<node>f,t; vis[sx][sy]=1; vis[ex][ey]=2; int s1=0,s2=0; f.push(node(sx,sy)); t.push(node(ex,ey)); while((!f.empty())||(!t.empty())){ bool flag=false; if(!f.empty()){ int sz=f.size(); while(sz--){//每次扩展一层 node cur=f.front(); f.pop(); for(int i=0;i<8;i++){ int tx=cur.x+dir[i][0]; int ty=cur.y+dir[i][1]; if(OK(tx,ty)){ if(vis[tx][ty]==2){flag=true;break;} if(vis[tx][ty]==1) continue; vis[tx][ty]=1; f.push(node(tx,ty)); } } if(flag) break; } s1++; } if(flag) return s1+s2; if(!t.empty()){ int sz=t.size(); while(sz--){//每次扩展一层 node cur=t.front(); t.pop(); for(int i=0;i<8;i++){ int tx=cur.x+dir[i][0]; int ty=cur.y+dir[i][1]; if(OK(tx,ty)){ if(vis[tx][ty]==1){flag=true; break;} if(vis[tx][ty]==2) continue; vis[tx][ty]=2; t.push(node(tx,ty)); } } if(flag) break; } s2++; } if(flag) return s1+s2; } return 0;}int main(){ scanf("%d",&cas); while(cas--){ scanf("%d",&n); scanf("%d %d %d %d",&sx,&sy,&ex,&ey); memset(vis,0,sizeof(vis)); printf("%d\n",bfs()); } return 0;}
- POJ 1915 Knight Moves 双向搜索
- (搜索,双向BFS)POJ.1915.Knight Moves
- poj 1915 Knight Moves(双向广搜)
- poj 1915 knight moves (双向bfs)
- Poj 1915 - Knight Moves 双向广搜
- POJ 1915 Knight Moves(双向BFS)
- POJ 1915 Knight Moves 双向BFS 入门
- poj 1915 Knight Moves 【双向bfs】
- POJ 1915 Knight Moves bfs || 双向bfs
- POJ 1915 Knight Moves (广度搜索)
- POJ-1915 Knight Moves 简单搜索
- pku 1915 Knight Moves(双向广度优先搜索)
- poj 1915 Knight Moves
- poj 1915 Knight Moves
- poj 1915 Knight Moves
- POJ 1915 Knight Moves
- poj 1915 Knight Moves
- POJ 1915 Knight Moves
- QPixmap
- php开发环境搭建
- 黑马程序员---第一天学习JAVA的总结,压箱底了,翻出来留个纪念
- Hadoop公平调度器指南
- ndk-gdb help
- POJ 1915 Knight Moves 双向搜索
- eclipse+ mingw + opencv2.3.1 配置
- iOS: NSNotificationCenter的方法postNotificationName:object:
- linux tap虚拟网卡驱动程序设计原理
- iOS程序进入后台后仍运行定时器NSTimer
- iOS: NSNotificationCenter的方法postNotificationName:object:userInfo:
- u盘安装win server2003系统iso
- 怎么把android模拟器的背景色设置默认为黑色
- ANDROID调用卸载软件功能