1、http://acm.hdu.edu.cn/showproblem.php?pid=1372
2、题目大意:给定一个棋盘,列用a--h表示,行用1-8表示,题目给定一个起始位置一个结束位置,求出从起始位置到结束位置用多少步;
3、最基本的BFS代码,留作模板用。。。、
题目:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4969 Accepted Submission(s): 3032
e2 e4 a1 b2 b2 c3 a1 h8 a1 h7 h8 a1 b1 c3 f6 f6
To get from e2 to e4 takes 2 knight moves. To get from a1 to b2 takes 4 knight moves. To get from b2 to c3 takes 2 knight moves. To get from a1 to h8 takes 6 knight moves. To get from a1 to h7 takes 5 knight moves. To get from h8 to a1 takes 6 knight moves. To get from b1 to c3 takes 1 knight moves. To get from f6 to f6 takes 0 knight moves.
4、ac代码:
#include<stdio.h> #include<string.h> char s[5]; char e[5]; int sx,sy,ex,ey; int visit[9][9]; int dir[8][2]= {1,2,2,1,2,-1,1,-2,-1,-2,-2,-1,-2,1,-1,2}; struct node { int x; int y; int step; } knight[70]; int bfs(int n) { memset(visit,0,sizeof(visit)); node cur,change; knight[0].x=sx; knight[0].y=sy; knight[0].step=0; int start=0,end=1; while(start<end) { cur=knight[start++]; if(cur.x==ex &&cur.y==ey) { return cur.step; } else { for(int i=0; i<8; i++) { int tx=cur.x+dir[i][0]; int ty=cur.y+dir[i][1]; if(tx>=1 && tx<=8 && ty>=1 && ty<=8 && visit[tx][ty]==0) { visit[tx][ty]=1; change.x=tx; change.y=ty; change.step=cur.step+1; knight[end++]=change; } } } } } int main() { while(scanf("%s%s",s,e)!=EOF) { sx=s[1]-'0'; sy=s[0]-'a'+1; ex=e[1]-'0'; ey=e[0]-'a'+1; //printf("%d %d %d %d\n",sx,sy,ex,ey); printf("To get from %s to %s takes %d knight moves.\n",s,e,bfs(8)); } return 0; }