HDU-1372-Knight Moves

来源:互联网 发布:网络直播公司招聘 编辑:程序博客网 时间:2024/05/21 10:41

BFS的题,没有用BFS做,而是用的Floyd做的

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int inf=1<<28;int map[9][9][9][9],movex[8]={1,1,-1,-1,2,2,-2,-2},movey[8]={2,-2,2,-2,1,-1,1,-1};void Init(){    for(int i=1;i<=8;i++)for(int j=1;j<=8;j++)    for(int k=1;k<=8;k++)for(int l=1;l<=8;l++){    if(i==k&&j==l)map[i][j][k][l]=0;    elsemap[i][j][k][l]=inf;}    for(int i=1;i<=8;i++)for(int j=1;j<=8;j++)    for(int k=0;k<8;k++)    {int itx=i+movex[k];int ity=j+movey[k];if(itx<0||itx>8||ity<0||ity>8)    continue;    map[i][j][itx][ity]=1;    }    for(int kx=1;kx<=8;kx++)for(int ky=1;ky<=8;ky++)    for(int ix=1;ix<=8;ix++)for(int iy=1;iy<=8;iy++)    for(int jx=1;jx<=8;jx++)for(int jy=1;jy<=8;jy++)    map[ix][iy][jx][jy]=min(map[ix][iy][kx][ky]+map[kx][ky][jx][jy],map[ix][iy][jx][jy]);}int main(){    char stra[3],strb[3];    Init();    while(scanf("%s%s",stra,strb)!=EOF)    {printf("To get from %s to %s takes %d knight moves.\n",stra,strb,map[stra[0]-'a'+1][stra[1]-'0'][strb[0]-'a'+1][strb[1]-'0']);    }    return 0;}


原创粉丝点击