P1135 奇怪的电梯

我声明这个题就是个哈皮题,搞几个根本没有现实意义的数据卡你,到底是-1还是0

不想说太多

采用最最基础的BFS,没啥技术含量。看洛谷的题解还有人玩spaf、dfs、dij等等,总之玩法很多,我只会bfs

#include <bits/stdc++.h>

using namespace std;


int main()
{
    int n,m,x,y;
    cin>>n>>m>>x>>y;
    int f[405][405];
    bool visit[405][405];
    int dx[8] = {1,1,2,2,-1,-1,-2,-2};
    int dy[8] = {-2,2,-1,1,2,-2,1,-1};
    memset(f,-1,sizeof(f));
    memset(visit,false,sizeof(visit));
    queue<pair<int,int> > q;
    q.push(make_pair(x,y));
    visit[x][y] = true;
    f[x][y] = 0;
    while(!q.empty()){
        int xx = q.front().first;
        int yy = q.front().second;
        q.pop();
        for(int i = 0;i < 8;i++){
            int u = xx+dx[i];
            int v = yy+dy[i];
            if(u<1||u>n||v<1||v>m||visit[u][v]){
                continue;
            }
            else{
                f[u][v] = f[xx][yy] + 1;
                visit[u][v] = true;
                q.push(make_pair(u,v));
            }
            //cout<<"加了一个";
        }
    }
    //cout<<"a";
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= m;j++){
            printf("%-5d",f[i][j]);
        }
        if(i != n)
            printf("\n");
    }
    return 0;
}

/*
3个WA提示 read 0 excepted -1
意思就是本来不能达到的点,我认为0步可以达到
0步达到有这几种情况
1 出发点就是结束点
2 当前能走的步数为0,起点初始化为0,正好起点可以走的步数也为0
*/
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值