码迷,mamicode.com
首页 > 其他好文 > 详细

2016-05-24

时间:2016-05-25 00:30:51      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

算法:搜索(骑士问题)from hihocoder

简单的bfs

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct point
{
    int x,y;
    point(){}
    point(int xx,int yy)
    {
        x=xx;y=yy;
    }
};
int step[4][10][10];
int dirx[8]={-2,-1,1,2,2,1,-1,-2};
int diry[8]={-1,-2,-2,-1,1,2,2,1};
void bfs(int ord,point cur)
{
    int i,x,y,dx,dy;
    queue<point> q;
    q.push(cur);
    while (!q.empty())
    {
        q.pop();
        x=cur.x;y=cur.y;
        for (i=0;i<8;i++)
        {
            dx=dirx[i];dy=diry[i];
            if (x+dx>=1&&x+dx<=8&&y+dy>=1&&y+dy<=8&&step[ord][x+dx][y+dy]==-1)
            {
                point temp(x+dx,y+dy);
                q.push(temp);
                step[ord][x+dx][y+dy]=step[ord][x][y]+1;
            }
        }
        cur=q.front();
    }
}
int main()
{
    int t,i,j,k,ans,sum,x,y;
    char str[5];
    scanf("%d",&t);
    while (t--)
    {
        for (i=1;i<=3;i++)
        {
            scanf("%s",str);
            x=str[0]-64;
            y=str[1]-48;
            for (j=0;j<10;j++)
                for (k=0;k<10;k++)
                    step[i][j][k]=-1;
            step[i][x][y]=0;
            point start;
            start.x=x;start.y=y;
            bfs(i,start);
        }
        ans=10000;
        for (i=1;i<=8;i++)
            for (j=1;j<=8;j++)
            {
                sum=0;
                for (k=1;k<=3;k++) sum+=step[k][i][j];
                if (sum<ans) ans=sum;
            }
        printf("%d\n",ans);
    }
    return 0;
}

 

2016-05-24

标签:

原文地址:http://www.cnblogs.com/ronchen/p/5525376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!