BFS求最短路有关问题:杭电OJ1372 跳马

BFS求最短路问题:杭电OJ1372 跳马
问题意思是在8*8的棋盘上,马从一个坐标跳到另一坐标的最小步数.
我这样求有什么问题?我只检验了一下步数。发现错了,我想了好久,我把这个问题看成是一棵树了,最小步数应该是最后到达的层数。这样有错么,望高人指导啊。

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int dir[8][2]={{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};
struct node{int x,y,step;};
queue<node>que;
bool matrix[9][9];
int ax,ay,bx,by;
node cur;
int bfs()
{
  int i;
  if(ax==bx&&ay==by)return 0;
  cur.x=ax,cur.y=ay,cur.step=0;
  matrix[ax][ay]=1;
  que.push(cur);
  while(!que.empty())
  {
  cur=que.front(),que.pop();
  cur.step++;
  for(i=0;i<8;i++)
  {
  ax=cur.x+dir[i][0];
  ay=cur.y+dir[i][1];
  if(ax>0&&ax<9&&ay>0&&ay<9)
  {
  matrix[ax][ay]=1;
  cout<<ax<<" "<<ay<<endl;
  if(ax==bx&&ay==by)return cur.step;
  cur.x=ax,cur.y=ay;

  que.push(cur);
  }
  }
  }
  return -1;
}
int main()
{
  char t1,t2;
  while(cin>>t1>>ay>>t2>>by)
  {
  ax=t1-'a'+1;bx=t1-'a'+1;
  memset(matrix,0,sizeof(matrix));
  cout<<bfs()<<endl;
  }
  return 0;
}


------解决方案--------------------
while(!que.empty())
{
cur=que.front(),que.pop();
cur.step++;
for(i=0;i<8;i++)
{
ax=cur.x+dir[i][0];
ay=cur.y+dir[i][1];
if(ax>0&&ax<9&&ay>0&&ay<9)
{
matrix[ax][ay]=1;
cout<<ax<<" "<<ay<<endl;
if(ax==bx&&ay==by)return cur.step;
cur.x=ax,cur.y=ay;

que.push(cur);
}
}
}


这里step计算有点问题吧。每次出队的时候把step++,我感觉应该是每次入队的时候把step记为父节点的step+1吧。改为:

while(!que.empty())
{
cur=que.front(),que.pop();
//cur.step++;
for(i=0;i<8;i++)
{
ax=cur.x+dir[i][0];
ay=cur.y+dir[i][1];
tmp=cur.step;
if(ax>0&&ax<9&&ay>0&&ay<9)
{
matrix[ax][ay]=1;
cout<<ax<<" "<<ay<<endl;
cur.x=ax,cur.y=ay;
cur.step=tmp++;
if(ax==bx&&ay==by)return cur.step;
  
que.push(cur);
}
}
}