PKU 2243
来源:互联网 发布:山东大学网络教育导读 编辑:程序博客网 时间:2024/05/22 04:33
这是一个典型的广度优先搜索(BFS)的题目,由于本人对国际象棋规则不懂,更是英语比较差,把题目中的knight误以为是国王,导致出现错误。最后还是改正AC了,呵呵。下面是源代码:
#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;
}
- PKU 2243
- PKU 2243 Knight Moves
- pku 2243 Knight Moves
- pku 1018 && pku 1095
- pku 3345 && pku 3107
- PKU 1161、PKU 2524、 PKU 1308
- PKU 2778 HDU 2243 AC自动机 + 矩阵乘法
- PKU-2243 Knight Moves (单BFS、双BFS)
- pku 1003
- pku 1125
- PKU 1002
- PKU题解
- pku 3278
- pku-1001
- pku-acm
- pku 1979
- PKU 1012
- pku 2236
- ODBC动态创建数据源
- 2008年04月01日
- 2008年04月02日
- 软件测试视频
- 基于asp.net和ajax的web应用程序
- PKU 2243
- VC++中的ON_COMMAND_RANGE宏(附例子)
- 【网络】随笔
- s3c2440启动文件分析
- 菜单的创建(步骤)
- 学论语(1)
- 饮水的误区
- 你过过月入15000的生活吗?
- 论语学习(2)