/*This Code is Submitted by billforum for Problem 4000099 at 2012-01-27 15:36:46*/#include#include #include using namespace std;struct point{ int x,y,f,step; }data[10][10];bool legal(int x,int y){ return (x<8&&x>=0&&y<8&&y>=0&&(data[y][x].f==0)); }int main(int args,char** argv){ int dx[8]={-2,-2,-1,-1,1,1,2,2}; int dy[8]={-1,1,-2,2,-2,2,-1,1}; int total=0; char cs,cf; int xs,xf,ys,yf; int ans; while(cin>>cs>>xs>>cf>>xf) { ans=0; for(int i=0;i<8;i++) for(int j=0;j<8;j++) { data[i][j].x=j; data[i][j].y=i; data[i][j].f=0; data[i][j].step=0; } ys=cs-'a'; yf=cf-'a'; xs=xs-1; xf=xf-1; queue list; point tmp; data[ys][xs].f=1; list.push(data[ys][xs]); while(!list.empty()) { tmp=list.front(); if(tmp.x==xf&&tmp.y==yf) { ans=tmp.step; break; } for(int i=0;i<8;i++) { if(legal(tmp.x+dx[i],tmp.y+dy[i])) { data[tmp.y+dy[i]][tmp.x+dx[i]].f=1; data[tmp.y+dy[i]][tmp.x+dx[i]].step=tmp.step+1; list.push(data[tmp.y+dy[i]][tmp.x+dx[i]]); } } list.pop(); } cout<<"To get from "< < <<" to "< < <<" takes "< <<" knight moves."<
http://acm.hit.edu.cn/hoj/problem/view?id=1440
简单的广搜