HDU 1372 Knight Moves (BFS)

本文探讨了在解决边界问题时,如何使用骑士走法进行路径规划,并通过实例展示了算法实现过程。从输入坐标出发,经过多次尝试,最终到达目标坐标,详细记录了解题步骤和关键代码。

题目链接

又是边界。。。错了两次,从今天开始准备期末考试,明显挑战很大啊!

#include <stdio.h>
#include <string.h>
int p[20][20],o1[300],o2[300];
int main()
{
    int i,j,k,start,end,c0,r0;
    int num;
    int change1[9]= {1,1,-1,-1,2,2,-2,-2};
    int change2[9]= {2,-2,2,-2,1,-1,1,-1};
    char c1,r1,c2,r2;
    while(scanf("%c%c%*c%c%c%*c",&c1,&r1,&c2,&r2)!=EOF)
    {
        memset(p,0,sizeof(p));
        num = 0;
        o1[0] = c1 - 'a' + 1;
        o2[0] = r1 - '0';
        c0 = c2 - 'a' + 1;
        r0 = r2 - '0';
        p[o1[0]][o2[0]] = 1;
        start = end = 0;
        for(;;)
        {
            j = 1;
            if(p[c0][r0])break;
            for(i = start; i <= end; i ++)
            {
                for(k = 0; k <= 7; k ++)
                {
                    if(o1[i]+change1[k]<=8&&o1[i]+change1[k]>=1&&o2[i]+change2[k]<=8&&o2[i]+change2[k]>=1)
                    {
                        if(p[o1[i]+change1[k]][o2[i]+change2[k]] == 0)
                        {
                            o1[end+j] = o1[i]+change1[k];
                            o2[end+j] = o2[i]+change2[k];
                            j ++;
                            p[o1[i]+change1[k]][o2[i]+change2[k]] = 1;
                        }
                    }
                }
            }
            start = end + 1;
            end = end + j - 1;
            num ++;
        }
        printf("To get from %c%c to %c%c takes %d knight moves.\n",c1,r1,c2,r2,num);
    }
    return 0;
}

  

 

转载于:https://www.cnblogs.com/naix-x/archive/2012/06/04/2535273.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值