zoukankan      html  css  js  c++  java
  • HDU 1372 Knight Moves,bfs

    http://acm.hdu.edu.cn/showproblem.php?pid=1372

    简单广搜,秒过,关键在于国际象棋中马的走法是日,我日。。。

    #include<stdio.h>
    #include<string.h>
    int visited[8][8],dir[8][2]={{-2,-1},{-2,1},{2,-1},{2,1},{-1,-2},{-1,2},{1,-2},{1,2}};//可以走四个方向 
    int sx,sy,ex,ey;
    struct node
    {
       int x,y,move;
    }s[100000];
    int pd(int a,int b)
    {
        return (a<0||a>=8||b<0||b>=8);
    }
    int bfs()
    {
        int i,count=0,k,m,x,y;
        int q[100000],head,tail;
        memset(visited,0,sizeof(visited));
        head=tail=0;
        s[count].x=sx;
        s[count].y=sy;
        s[count].move=0;
        q[head]=count;
        while(head<=tail)
        {
           k=q[head++];
           if(s[k].x==ex&&s[k].y==ey)
             return s[k].move;
           m=s[k].move+1;
           for(i=0;i<8;i++)
           {
              x=s[k].x+dir[i][0];
              y=s[k].y+dir[i][1];
              if(pd(x,y))continue;//越界就进行下个循环 
              if(!visited[x][y])
              {
              s[++count].x=x;
              s[count].y=y;
              s[count].move=m;
              q[++tail]=count;
              visited[x][y]=1;
               if(s[count].x==ex&&s[count].y==ey)
             return s[count].move;
             }
           }
        }
    }
    int main()
    {
        char b[4],e[4];
        while(scanf("%s %s",b,e)!=EOF)
        {
           //printf("%s %s
    ",b,e);
           sx=b[0]-'a';
           sy=b[1]-'1';
           ex=e[0]-'a';
           ey=e[1]-'1';
           printf("To get from %s to %s takes %d knight moves.
    ",b,e,bfs());
        }
        return 0;
    } 
    View Code
  • 相关阅读:
    基础数据类型补充
    编码转换
    is 和 == 的区别
    字典 dict
    列表与元组
    python基础第一节
    poll函数
    基本 TCP 的回射服务器
    文件IO
    base | AtomicIntegerT类
  • 原文地址:https://www.cnblogs.com/huzhenbo113/p/3234715.html
Copyright © 2011-2022 走看看