zoukankan      html  css  js  c++  java
  • 广度搜索BFS

    马踏棋盘

    Time Limit:1000ms   Memory Limit:65535KB

    Description

    在中国象棋中,马是按照“日”字的形状进行跳跃的。对于一个给定的位置,马每次跳跃之后可以到达的位置如下图所示

    其中圆圈所在位置为马跳跃前所在位置,三角所在位置为跳跃一次后可以达到的位置
    现在给出一个大小为m行n列的棋盘,以及马所在的位置(a, b)和要到达的位置(c, d),求马从初始位置到终点位置需要跳跃的最少次数。如果不可到达,则次数为0

    Input

    输入数据中第一行为一个整数k(0到50),表示后面测试用例的数目,每一组测试用例由2行组成,第一行为m, n两个正整数,第二行为a, b, c, d四个正整数
    1 <= m, n <= 500
    1 <= a, c <= m
    1 <= b, d <= n

    Output

    对每个测试用例输出所需要的最少步数,如果不可达就输出0

    Sample Input

    2
    5 5
    1 1 3 2
    10 10
    2 2 5 8

    Sample Output

    1
    3

    Hint

    #include <iostream>
    #include <string.h>
    using namespace std;

    int step[501][501];
    int visited[501][501];
    int startx,starty,endx,endy,m,n;
    struct Node
    {
     int x;
     int y;
    } que[250001];

    void sousuo()
    {
     int direct[8][2]={{1,2},{2,1},{-1,-2},{-2,-1},{-1,2},{2,-1},{1,-2},{-2,1}};
     int front=-1,rear=-1,curx,cury,tempx,tempy,i;
        que[++rear].x=startx;
        que[rear].y=starty;
        step[startx][starty]=0;
        visited[startx][starty]=1;
       while(front!=rear)
       {
        curx=que[++front].x;
           cury=que[front].y;
           if((curx==endx)&&(cury==endy))
              break;
           for(i=0;i<8;i++)
        {
         tempx=curx+direct[i][0];
         tempy=cury+direct[i][1];
         if(tempx>0&&tempx<=m&&tempy>0&&tempy<=n&&visited[tempx][tempy]==0)
         {
          step[tempx][tempy]=step[curx][cury]+1;
          visited[tempx][tempy]=1;
          que[++rear].x=tempx;
          que[rear].y=tempy;
         }
        }
       }
    }

    int main()
    {
     int k;
     cin>>k;
     while(k--)
     {
      memset(step,0,sizeof(step));
      memset(visited,0,sizeof(visited));
      cin>>m>>n;
      cin>>startx>>starty>>endx>>endy;
      sousuo();
      cout<<step[endx][endy]<<endl;
     }
     return 0;
    }

  • 相关阅读:
    CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)
    hdu 4607 树形dp 树的直径
    poj 2955 区间dp入门题
    poj 2139 flord水题
    poj 2377 最大生成树
    lightoj 1422 区间dp
    模拟类似括号匹配
    nyoj 33 蛇形填数
    nyoj 2 括号配对问题水
    Hackonacci Matrix Rotations 观察题 ,更新了我的模板
  • 原文地址:https://www.cnblogs.com/waiting/p/1539706.html
Copyright © 2011-2022 走看看