zoukankan      html  css  js  c++  java
  • Wannafly Camp 2020 Day 6I 你吓到我的马了.jpg

    暴力BFS即可

    #include <bits/stdc++.h>
    using namespace std;
    
    int n,m,f[105][105];
    char s[105][105];
    struct pt {int x,y;};
    
    bool check(int i,int j) {
        if(i<=0 || i>n || j<=0 || j>m) return false;
        if(s[i][j]=='X') return false;
        return true;
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin>>n>>m;
        for(int i=1;i<=n;i++) cin>>s[i]+1;
        int si,sj;
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=m;j++) {
                if(s[i][j]=='M') si=i,sj=j;
            }
        }
        memset(f,0x3f,sizeof f);
        f[si][sj]=0;
        queue <pt> q;
        q.push((pt){si,sj});
        while(!q.empty()) {
            int pi=q.front().x,pj=q.front().y;
            q.pop();
            int t=f[pi][pj];
            if(check(pi+1,pj)) {
                if(check(pi+2,pj+1)&&0x3f3f3f3f==f[pi+2][pj+1])f[pi+2][pj+1]=min(f[pi+2][pj+1],t+1),q.push((pt){pi+2,pj+1});
                if(check(pi+2,pj-1)&&0x3f3f3f3f==f[pi+2][pj-1])f[pi+2][pj-1]=min(f[pi+2][pj-1],t+1),q.push((pt){pi+2,pj-1});
            }
            if(check(pi-1,pj)) {
                if(check(pi-2,pj+1)&&0x3f3f3f3f==f[pi-2][pj+1])f[pi-2][pj+1]=min(f[pi-2][pj+1],t+1),q.push((pt){pi-2,pj+1});
                if(check(pi-2,pj-1)&&0x3f3f3f3f==f[pi-2][pj-1])f[pi-2][pj-1]=min(f[pi-2][pj-1],t+1),q.push((pt){pi-2,pj-1});
            }
            if(check(pi,pj+1)) {
                if(check(pi+1,pj+2)&&0x3f3f3f3f==f[pi+1][pj+2])f[pi+1][pj+2]=min(f[pi+1][pj+2],t+1),q.push((pt){pi+1,pj+2});
                if(check(pi-1,pj+2)&&0x3f3f3f3f==f[pi-1][pj+2])f[pi-1][pj+2]=min(f[pi-1][pj+2],t+1),q.push((pt){pi-1,pj+2});
            }
            if(check(pi,pj-1)) {
                if(check(pi+1,pj-2)&&0x3f3f3f3f==f[pi+1][pj-2])f[pi+1][pj-2]=min(f[pi+1][pj-2],t+1),q.push((pt){pi+1,pj-2});
                if(check(pi-1,pj-2)&&0x3f3f3f3f==f[pi-1][pj-2])f[pi-1][pj-2]=min(f[pi-1][pj-2],t+1),q.push((pt){pi-1,pj-2});
            }
        }
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=m;j++) cout<<(f[i][j]>1e9?-1:f[i][j])<<(j==m?"":" ");
            if(i<n)cout<<endl;
        }
    }
    
  • 相关阅读:
    qt一直编译
    JavaWeb-国际化之Locale
    JavaWeb-文件下载
    JavaWeb-文件上传案例
    JavaWeb-使用fileload组件
    JavaWeb—文件上传基础
    JavaWeb-其他Listener监听器(3)
    JavaWeb-其他Listener监听器(2)
    JavaWeb-其他的servlet监听器(1)
    JavaWeb——通过Listener理解域对象生命周期
  • 原文地址:https://www.cnblogs.com/mollnn/p/12293249.html
Copyright © 2011-2022 走看看