您的位置:首页 > 理论基础 > 数据结构算法

hdu--1372 knight moves (BFS+数据结构)

2011-06-19 16:51 344 查看
#include "iostream"
#include "queue"
using namespace std;

int dir[8][2]={1,2,1,-2,2,1,2,-1,-1,2,-1,-2,-2,1,-2,-1};
int vis[8][8];
struct node{
int x;
int y;
int lev;
};

int BFS(node s, node e)
{
int i;
node front,temp;
queue <node> seq;

memset(vis,0,sizeof(vis));
if(s.x==e.x&&s.y==e.y) return 0;
while(!seq.empty())
seq.pop();
vis[s.x][s.y]=1;
seq.push(s);
while(!seq.empty())
{
front=seq.front();
vis[front.x][front.y]=1;
seq.pop();
for(i=0; i<8; i++)
{
temp.x = front.x + dir[i][0];
temp.y = front.y + dir[i][1];

if(temp.x>=0&&temp.x<8&&temp.y>=0&&temp.y<8&&!vis[temp.x][temp.y])
{
temp.lev = front.lev + 1;
if(temp.x == e.x && temp.y == e.y) return temp.lev;

seq.push(temp);
}

}

}
return 0;
}

int main()
{
char a[3],b[3];
node start,end;
while(cin >> a >> b)
{
start.x = a[0] - 'a';
start.y = a[1] - '1';
end.x = b[0] - 'a';
end.y = b[1] - '1';
start.lev = 0;
cout<<"To get from "<<a[0]<<a[1]<<" to "<<b[0]<<b[1]<<" takes "<<BFS(start,end)<<" knight moves."<<endl;

}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息