90分 RE1点 求助

回复帖子

@Veturins 2019-05-15 23:14 回复

RT

90分

8 RE

下面代码

#include<bits/stdc++.h>
using namespace std;
const int dx[10]= {0, 1, 1,-1,-1, 1,-1, 0, 0};
const int dy[10]= {0, 1,-1, 1,-1, 0, 0, 1,-1};
int m,n;
int g[105][105];
int vis[105][105][10],ans=1e9;

class pos
{
    public:
        int x;
        int y;
        int d;
        int s;
};

int main()
{
    cin>>n>>m;
    for(int i=1; i<=m; i++) {
        for(int j=1; j<=n; j++) {
            cin>>g[i][j];
        }
    }
    queue<pos> q;
    q.push((pos) {
        1,1,0,0
    });

    while(!q.empty()) {
        pos u=q.front();
        if(u.x==m&&u.y==n) {
            ans=min(ans,u.s);
        }
        for(int i=1; i<=8; i++) {
            pos v=(pos) {
                u.x+g[u.x][u.y]*dx[i],u.y+g[u.x][u.y]*dy[i],i,u.s+1
            };
            if(i!=u.d&&vis[v.x][v.y][v.d]==0&&v.x>0&&v.y>0&&v.x<=m&&v.y<=n) {
                q.push(v);
                vis[v.x][v.y][v.d]=1;
            }
        }
        q.pop();
    }
    if(ans==1e9)
        cout<<"NEVER";
    else
        cout<<ans;
}