加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Knight Moves

发布时间:2020-12-16 09:11:46 所属栏目:百科 来源:网络整理
导读:题目描述 思路 代码描述 #include cstdio#include cstring#include queueint n,m,ans;struct Node { int x,y,z;}st,ed,tmp;std::queueNode q;int mp[305][305];bool vis[305][305];int dirx[] = {0,-1,-2,1,2,1};int diry[] = {0,-2};bool valid(int x,int y

题目描述

思路

代码描述

#include <cstdio>
#include <cstring>
#include <queue>

int n,m,ans;
struct Node {
    int x,y,z;
}st,ed,tmp;
std::queue<Node> q;
int mp[305][305];
bool vis[305][305];
int dirx[] = {0,-1,-2,1,2,1};
int diry[] = {0,-2};
bool valid(int x,int y) {
    if (x < 0 || x >= m) return false;
    if (y < 0 || y >= m) return false;
    return true;
}
inline int read() {
    int s = 0,f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-') f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0',ch = getchar();
    return s * f;   
}
int main() {
    n = read();
    while (n--) {
        m = read();
        st.x = read(),st.y = read(),st.z = 0;
        ed.x = read(),ed.y = read();
        tmp.x = st.x,tmp.y = st.y,tmp.z = st.z;
        while (!q.empty()) q.pop();
        memset(vis,sizeof(vis));
        q.push(tmp);
        vis[tmp.x][tmp.y] = true;
        while (!q.empty()) {
            st = q.front();
            q.pop();
            if (st.x == ed.x && st.y == ed.y) {
                ans = st.z; 
                break;
            }
            for (int i = 1; i <= 8; ++i) {
                tmp.x = st.x + dirx[i];
                tmp.y = st.y + diry[i];
                tmp.z = st.z + 1;
                if (valid(tmp.x,tmp.y) && !vis[tmp.x][tmp.y]) {
                    vis[tmp.x][tmp.y] = 1;
                    q.push(tmp);
                }
            }
        }
        printf("%dn",ans);
    }
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读