hdu1372Knight Moves
来源:互联网 发布:数据增值服务内容 编辑:程序博客网 时间:2024/06/03 07:18
入门bfs搜索题,题意为给点起点终点问最少多少步到达,使用双向bfs,比盲搜时间
快了将近一倍
#include <cstdio>#include <queue>using namespace std;const int dir[8][2]={{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};struct node{ int x,y;};typedef pair <node,int> pii;bool in(int x,int y){ if(x<=8&&x>0&&y<=8&&y>0) return true; return false;}int main(){ char A[5],B[5]; while(scanf("%s%s",A,B)!=EOF){ int qp[9][9]; for(int i=1;i<=8;i++) for(int j=0;j<=8;j++) qp[i][j]=0; node Begin={A[0]-96,A[1]-48}; node End={B[0]-96,B[1]-48}; if(Begin.x==End.x&&Begin.y==End.y){ printf("To get from %s to %s takes 0 knight moves.\n",A,B); continue; } qp[Begin.x][Begin.y]=1; qp[End.x][End.y]=2; queue<pii> q; queue<pii> p; q.push(make_pair(Begin,0)); p.push(make_pair(End,0)); int flag=1; int ans1=0,ans2=0; while(flag){ int cnt1=q.size(); while(cnt1--&&!q.empty()&&flag){ pii pi=q.front(); q.pop(); int nowx=pi.first.x; int nowy=pi.first.y; ans1=pi.second+1; for(int i=0;i<8;i++){ if(in(nowx+dir[i][0],nowy+dir[i][1])){ if(qp[nowx+dir[i][0]][nowy+dir[i][1]]==0){ node lin={nowx+dir[i][0],nowy+dir[i][1]}; q.push(make_pair(lin,ans1)); qp[lin.x][lin.y]=1; } else if(qp[nowx+dir[i][0]][nowy+dir[i][1]]==2){ printf("To get from %s to %s takes %d knight moves.\n",A,B,ans1+ans2); flag=0; break; } } } } int cnt2=p.size(); while(cnt2--&&!p.empty()&&flag){ pii pi=p.front(); p.pop(); int nowx=pi.first.x; int nowy=pi.first.y; ans2=pi.second+1; for(int i=0;i<8;i++){ if(in(nowx+dir[i][0],nowy+dir[i][1])){ if(qp[nowx+dir[i][0]][nowy+dir[i][1]]==0){ node lin={nowx+dir[i][0],nowy+dir[i][1]}; p.push(make_pair(lin,ans1)); qp[lin.x][lin.y]=2; } else if(qp[nowx+dir[i][0]][nowy+dir[i][1]]==1){ printf("To get from %s to %s takes %d knight moves.\n",A,B,ans1+ans2); flag=0; break; } } } } } } return 0;}
0 0
- hdu1372Knight Moves
- hdu1372Knight Moves
- hdu1372Knight Moves
- hdu1372Knight Moves(基本bfs)
- hdu1372Knight Moves bfs
- 搜索专题: HDU1372Knight Moves
- Knight Moves
- pku1915Knight Moves
- zoj1091_hdu1372_Knight Moves
- Knight Moves
- POJ2243Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- 互联网+农业电商
- Redhat7/Centos7 安装配置 RabbitMQ
- Flume环境部署和配置详解及案例大全
- Ubuntu 15.04 root登录,无声音解决方案
- Win7下实现 lpk.dll劫持游戏注入
- hdu1372Knight Moves
- Select2我想传默认值,传值自由
- 利用Loader来动态加载不同的QML文件来改变UI
- [MFC]CListBox列表框类
- Linux学习与开发基本概念汇总
- Linux Shell编程学习笔记(3)
- CentOS7安装7zip解压缩软件
- jquery ul li左右拖动
- mysql 数据操作。唯一索引