hdu 1372 Knight Moves

嘻嘻,直接BFS

水过……

#include<iostream>
#include<math.h>
#include<queue>
using namespace std;
int map[9][9],si,sj,ei,ej,mins;
int dir[8][2]={{2,1},{1,2},{-2,1},{2,-1},{1,-2},{-2,-1},{-1,-2},{-1,2}};
struct node
{
	int x,y,dis;
	node(int _x=0,int _y=0,int _dis=0):x(_x),y(_y),dis(_dis){};   
   /* friend bool operator<(const node &a,const node & b) 
    {     
        return a.dis>b.dis; 
    }*/
};
void bfs()
{
	node f;
	f.x=si;f.y=sj;f.dis=0;
	queue<node> q;
	q.push(f);
	while(!q.empty())
	{
		node t=q.front();
		q.pop();
		if(t.x==ei&&t.y==ej)
		{
			mins=t.dis;
			return ;
		}
    	for(int k=0;k<8;k++)
	   {
		int i=t.x+dir[k][0];
		int j=t.y+dir[k][1];
		 if(i<=8&&i>0&&j<=8&&j>0&&!map[i][j])
		  {
			map[i][j]=1;
			q.push(node(i,j,t.dis+1));
		   }
		}
	}
}
int main()
{
	char a,b;
	int c,d;
	while(cin>>a>>c>>b>>d)
	{
		si=c;
		sj=a-'a'+1;
		ei=d;
		ej=b-'a'+1;
		//cout<<si<<' '<<sj<<' '<<ei<<' '<<ej<<endl;
		memset(map,0,sizeof(map));
		map[si][sj]=1;
		mins=100000;
		bfs();
		cout<<"To get from "<<a<<c<<" to "<<b<<d<<" takes "<<mins<<" knight moves."<<endl;
	}
	return 0;
}
posted @ 2011-08-01 19:06  枕边梦  阅读(172)  评论(0编辑  收藏  举报