poj2243

来源:互联网 发布:驱动保护编程 编辑:程序博客网 时间:2024/04/30 14:33

可以用A*算法,不过宽搜已经能过了

#include <iostream>#include <cstring>#include <queue>#include <cstdio>struct node{    int x;    int y;    int step;};node start,end;void BFS(); using namespace std;  int main()  {     char c1,c2,c3,c4;     while(scanf("%c%c",&c1,&c2)==2)     {         getchar();         scanf("%c%c",&c3,&c4);         start.x=c1-'a'+1;         start.y=c2-'0';         start.step=0;         end.x=c3-'a'+1;         end.y=c4-'0';         BFS();         getchar();      }      return 0;  }void BFS(){    queue<node>q;    int visit[10][10];    int a[]={-2,-1,1,2,-2,-1,1,2};    int b[]={1,2,2,1,-1,-2,-2,-1};    int i,j;    memset(visit,0,sizeof(visit));    node temp,k;    q.push(start);    while(!q.empty())    {        temp=q.front();        q.pop();        if ((temp.x==end.x)&&(temp.y==end.y))        {            printf("To get from %c%d to %c%d takes %d knight moves.\n",start.x+'a'-1,start.y,end.x+'a'-1,end.y,temp.step);            return;        }        for (i=0;i<=7;i++)        {            if ((temp.x+a[i]>=1)&&(temp.x+a[i]<=8)&&(temp.y+b[i]>=1)&&(temp.y+b[i]<=8)&&(!visit[temp.x+a[i]][temp.y+b[i]]))            {            k.x=temp.x+a[i];            k.y=temp.y+b[i];            k.step=temp.step+1;           visit[temp.x+a[i]][temp.y+b[i]]=1;            q.push(k);            }        }     }}


0 0