zoukankan      html  css  js  c++  java
  • UVA 439 Knight Moves

    题目:

      给出国际象棋棋盘中的两个点,求马从一个点跳到另一个点的最少步数。

    分析:

      搜索、最短路。利用bfs去接即可。

    代码:

      

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <fstream>
    using namespace std;
    #define maxn 8
    char m[2][5];
    int step[8][2]={{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{1,-2},{-1,2},{-1,-2}};
    int x1,y1,x2,y2;
    int vis[8][8];
    int a[1000];
    int num[1000];
    int bfs(int x,int y)
    {
    int front=0,rear=0;
    a[front++]=x*8+y;
    vis[x][y]=1;
    while(front>rear)
    {
    x=a[rear]/8;
    y=a[rear]%8;
    if(x==x2&&y==y2)
    return num[rear];
    for(int i=0;i<8;i++)
    {
    int nx=x+step[i][0];
    int ny=y+step[i][1];
    if(nx>=0&&ny>=0&&nx<8&&ny<8&&vis[nx][ny]==0)
    {
    vis[nx][ny]=1;
    a[front]=nx*8+ny;
    num[front++]=num[rear]+1;
    }
    }
    rear++;
    }
    }
    int main()
    {
    while(cin>>m[0]>>m[1])
    {
    memset(vis,0,sizeof(vis));
    memset(num,0,sizeof(num));
    x1=m[0][1]-'1';
    y1=m[0][0]-'a';
    x2=m[1][1]-'1';
    y2=m[1][0]-'a';
    int l=bfs(x1,y1);
    cout<<"To get from "<<m[0]<<" to "<<m[1]<<" takes "<<l<<" knight moves."<<endl;
    }
    }
  • 相关阅读:
    CF601C Kleof&#225;š and the n-thlon 题解
    CSP-J2 2020 T3,T4 题解
    题解:Luogu P2051 [AHOI2009]中国象棋
    三角函数
    Luogu P1904 天际线
    计算几何初步
    C++STL(set……)
    斜率优化DP
    欧拉图、哈密顿图
    初赛—错题集
  • 原文地址:https://www.cnblogs.com/137033036-wjl/p/4882098.html
Copyright © 2011-2022 走看看