一个跳马的题,直接bfs就好。。。。。
水过
#include<iostream>
#include<queue>
using namespace std;
int a[9][9];
char i1,i2;
int j1,j2;
int jump[]={-2,-1,-1,-2,-1,+2,-2,+1,1,2,1,-2,2,1,2,-1};
void init()
{
for(int i=1;i<9;i++)
for(int j=1;j<9;j++)
a[i][j]=0;
}
void dfs()
{
queue<int> q;
a[i1][j1]=1;
q.push(i1*10+j1);
while(!a[i2][j2])
{
int t=q.front();
int x=t/10,y=t%10;
for(int i=0;i<16;i++)
{
int ti=x+jump[i++];
int tj=y+jump[i];
if(ti>0&&ti<9&&tj>0&&tj<9&&!a[ti][tj])
{
a[ti][tj]=a[x][y]+1;
q.push(ti*10+tj);
}
}
q.pop();
}
}
int main()
{
while(cin>>i1>>j1>>i2>>j2)
{
cout<<"To get from "<<i1<<j1
<<" to "<<i2<<j2<<" takes ";
i1-='a'-1;
i2-='a'-1;
init();
dfs();
cout<<a[i2][j2]-1<<" knight moves."<<endl;
}
}
肿么吧bfs写成dfs了
=,=