首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Knight Movies有关问题,请问一上哪里出毛病了

2012-10-15 
Knight Movies问题,请教一下哪里出毛病了C/C++ code/**************************************************

Knight Movies问题,请教一下哪里出毛病了

C/C++ code
/************************************************************************//* 功能:Knight Moves                                                                     *//************************************************************************/#include <iostream>#include <queue>using namespace std;int direction[8][2]={(-2,+1),(-1,+2),(+1,+2),(+2,+1),(+2,-1),(+1,-2),(-1,-2),(-2,-1)};char start[3];char end[3];int travel_direct;int min_step;struct Knight{    int x;    int y;};struct  Node{    Knight k;    Node *child[8];};int search(int si,int sj,int ei,int ej){    min_step=0;    queue<Node*> travel;    Node *root,*f;    Knight k;     root=f=NULL;    bool flag=true;    int tempx,tempy;    k.x=si;    k.y=sj;    root->k=k;    if(root->k.x==si&&root->k.y==sj)    {        return 0;    }    else    {        travel.push(root);        while(!travel.empty()&&flag)        {            f=root;            f=travel.front();            travel.pop();            min_step++;            for(int i=0;i<8;i++)            {                tempx=f->child[i]->k.x=root->k.x+direction[i][0];                tempy=f->child[i]->k.y=root->k.y+direction[i][1];                if(tempx==ei&&tempy==ej)                {                    //return min_step;                    flag=false;                    break;                }                if(tempx<=8&&tempx>0&&tempy<=0&&tempy>0)                    travel.push(f);            }        }        return min_step;    }}int main(){    while(scanf("%s %s",start,end))    {        int si,sj,ei,ej;        int min;        si=start[0]-'a'+1;        sj=start[1]-'0';        ei=end[0]-'a'+1;        ej=end[1]-'0';        min=search(si,sj,ei,ej);        printf("To get from %s to %s takes %d knight moves.\n",start,end,min);    }    return 0;}


[解决办法]
还可以斜着走的话,也可以直接计算出来的,先斜着走到同一列或者同一行中,在横着走或者竖着走,必定是最短距离。

热点排行