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

hdu Knight Moves

时间:2015-03-12 16:38:17      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

这道题实到bfs的题目,很简单,不过搜索的方向变成8个而已,对于不会下象棋的会有点晕。

技术分享
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
int c[9][9];
int dir[8][2] = {{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}};
typedef struct
{
    int x,y,count;
}node;
node start,finish;
int bfs()
{
    memset(c,0,sizeof(c));
    node pre,cur;
    start.count = 0;
    queue<node> q;
    q.push(start);
    c[start.x][start.y] = 1;
    while(!q.empty())
    {
        pre = q.front();
        q.pop();
        if(pre.x == finish.x&&pre.y == finish.y)
        return pre.count;
        for(int i = 0; i < 8; i++)
        {
            cur.x = pre.x + dir[i][0];
            cur.y = pre.y + dir[i][1];
            if(cur.x<1||cur.x>8||cur.y<1||cur.y>8)continue;
            if(c[cur.x][cur.y]==1)continue;
            c[cur.x][cur.y] = 1;
            cur.count = pre.count + 1;
            q.push(cur);
        }
    }
    return -1;
}
int main()
{
    char row,end;
    int col,ed;
    int min;
    while(scanf("%c",&row)!=EOF)
    {
        scanf("%d",&col);
        getchar();
        scanf("%c%d",&end,&ed);
        getchar();
        start.x = row-a+1;
        start.y = col;
        finish.x = end-a+1;
        finish.y = ed;
        if(start.x==finish.x&&start.y==finish.y)
        min = 0;
        else  min = bfs();
        printf("To get from %c%d to %c%d takes %d knight moves.\n",row,col,end,ed,min);
    }
    return 0;
}
View Code

 

hdu Knight Moves

标签:

原文地址:http://www.cnblogs.com/acm-jing/p/4332621.html

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