您的位置:首页 > 其它

poj 2243 bfs 利用 结构体中的step成员保存步数 ,STL的队列

2014-08-09 10:19 357 查看
//BFS

#include <iostream>
#include <queue>
using namespace std;
bool used[8][8];
int move[8][2]={1,2, -1,2, -2,1, -2,-1, -1,-2, 1,-2, 2,-1, 2,1};
struct position
{
int i,j;
int step;
position(int a,int b,int c)
{
i=a;
j=b;
step=c;
}
};
int main()
{
char a[2],b[2];
int bi,bj,ei,ej,i;
while (cin>>a>>b)
{
bi=a[0]-'a';
bj=a[1]-'1';
ei=b[0]-'a';
ej=b[1]-'1';
memset(used,false,sizeof(used));
queue<position> myqueue;
position temp(bi,bj,0),now(0,0,0);
myqueue.push(temp);
used[bi][bj]=true;
while (myqueue.empty()==false)
{
temp=myqueue.front();
myqueue.pop();
if (temp.i==ei && temp.j==ej)
break;
for (i=0;i<8;i++)
{
now.i=temp.i+move[i][0];
now.j=temp.j+move[i][1];
if (now.i>=0 && now.i<8 && now.j>=0 && now.j<8 && used[now.i][now.j]==false)
{
now.step=temp.step+1;
used[now.i][now.j]=true;
myqueue.push(now);
}
}
}
cout<<"To get from "<<a<<" to "<<b<<" takes "<<temp.step<<" knight moves."<<endl;
}
return 0;
}


//BFS

#include <iostream>
#include <queue>
using namespace std;
bool used[8][8];
int move[8][2]={1,2, -1,2, -2,1, -2,-1, -1,-2, 1,-2, 2,-1, 2,1};
struct position
{
int i,j;
int step;

};
int main()
{
char a[2],b[2];
int bi,bj,ei,ej,i;
while (cin>>a>>b)
{
bi=a[0]-'a';
bj=a[1]-'1';
ei=b[0]-'a';
ej=b[1]-'1';
memset(used,false,sizeof(used));
queue<position> myqueue;
struct position temp,now;
temp.i=bi; temp.j=bj; temp.step=0;
now.i=0; now.j=0; now.step=0;

myqueue.push(temp);
used[bi][bj]=true;
while (myqueue.empty()==false)
{
temp=myqueue.front();
myqueue.pop();
if (temp.i==ei && temp.j==ej)
break;
for (i=0;i<8;i++)
{
now.i=temp.i+move[i][0];
now.j=temp.j+move[i][1];
if (now.i>=0 && now.i<8 && now.j>=0 && now.j<8 && used[now.i][now.j]==false)
{
now.step=temp.step+1;
used[now.i][now.j]=true;
myqueue.push(now);
}
}
}
cout<<"To get from "<<a<<" to "<<b<<" takes "<<temp.step<<" knight moves."<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: