POJ 2243解题报告
2012-05-22 19:46
288 查看
BFS
#include <stdio.h> #include <memory.h> #include <stdlib.h> const int maxn=15; int visit[maxn*maxn]; int dir[8][2]={{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}}; char a[3]; char b[3]; int bfs(int st,int fin); int main() { while(scanf("%s",a)!=EOF) { scanf("%s",b); int sy=a[0]-'a'; int sx=a[1]-'1'; int fy=b[0]-'a'; int fx=b[1]-'1'; memset(visit,0,sizeof(visit)); int sl=sx*8+sy; int fl=fx*8+fy; if(sl==fl) { printf("To get from %s to %s takes 0 knight moves.\n",a,b); } else { printf("To get from %s to %s takes %d knight moves.\n",a,b,bfs(sl,fl)); } } return 0; } int bfs(int st,int fin) { int que[maxn*maxn]; int font=0; int rear=0; int distance[maxn*maxn]; distance[st]=0; que[rear++]=st; while(font<rear) { int on=que[font++]; int x=on/8; int y=on%8; int i; for(i=0;i<8;i++) { int dx=x+dir[i][0]; int dy=y+dir[i][1]; int on2=dx*8+dy; if(dx>=0&&dx<8&&dy>=0&&dy<8&&!visit[on2]) { visit[on2]=1; distance[on2]=distance[on]+1; que[rear++]=on2; if(on2==fin) return distance[on2]; } } } }
相关文章推荐
- POJ 2243解题报告
- POJ 2243解题报告
- POJ 2243解题报告
- POJ 1157 解题报告
- POJ 1862 Stipies 解题报告
- POJ 2375 解题报告
- Poj 1011 解题报告
- POJ-2488 A Knight's Journey 解题报告
- poj 1887解题报告
- poj 2739解题报告
- poj 2941 Homogeneous Squares 解题报告
- poj 2138-TOYS解题报告
- POJ 2407 Relatives 解题报告(欧拉函数水题)
- poj解题报告——1730
- 树状数组 离散化 求逆序数POJ 2299Ultra-QuickSort解题报告
- POJ 虫子的生活 解题报告 (种类并查集)
- (解题报告)POJ3664---Election Time---用结构体实现两组相关联数据的排序问题
- poj1013解题报告
- POJ 3735 Training little cats 解题报告(矩阵构造+快速幂优化)
- POJ1007解题报告