This problem to the BFS problem, very simple, but the direction of the search to become 8, for will not be a bit dizzy chess.
#include <iostream>#include<stdio.h>#include<string.h>#include<queue>using namespacestd;intc[9][9];intdir[8][2] = {{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}};typedefstruct{ intX,y,count;} Node;node Start,finish;intBFs () {memset (c,0,sizeof(c)); Node pre,cur; Start.count=0; Queue<node>Q; Q.push (start); C[START.X][START.Y]=1; while(!Q.empty ()) {Pre=Q.front (); Q.pop (); if(pre.x = = Finish.x&&pre.y = =finish.y)returnPre.count; for(inti =0; I <8; i++) {cur.x= pre.x + dir[i][0]; Cur.y= Pre.y + dir[i][1]; if(cur.x<1|| Cur.x>8|| cur.y<1|| Cur.y>8)Continue; if(c[cur.x][cur.y]==1)Continue; C[CUR.X][CUR.Y]=1; Cur.count= Pre.count +1; Q.push (cur); } } return-1;}intMain () {CharRow,end; intcol,ed; intmin; while(SCANF ("%c", &row)! =EOF) {scanf ("%d",&col); GetChar (); scanf ("%c%d",&end,&ed); GetChar (); Start.x= row-'a'+1; Start.y=Col; finish.x= end-'a'+1; Finish.y=Ed; if(start.x==finish.x&&start.y==finish.y) min=0; ElseMin =BFS (); printf ("To get from%c%d to%c%d takes%d Knight moves.\n", row,col,end,ed,min); } return 0;}View Code
HDU Knight Moves