//City of Demons
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=110,_fx[8][2]={{0,1},{0,-1},{1,-1},{1,0},{1,1},{-1,1},{-1,0},{-1,-1}};
int a[N][N],n,m,r=1,h=1;
bool vis_fx[N][N][8];
struct que{
int x,y,stp,fx;
}q[N*N*N];
bool InMap(int x,int y){
return (x>=1 && x<=m && y>=1 && y<=n);
}
bool Arrive(int x,int y){
return (x==m && y==n);
}
void Show_Queue(){
printf("*Show Queue\n ID x y stp fx\n");
for(int i=1;i<=h;i++)
printf("%3d %2d %2d %3d %2d\n",i,q[i].x,q[i].y,q[i].stp,q[i].fx);
printf("*\n");
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
q[1].x=1,q[1].y=1,q[1].stp=0;
while(r<=h){
for(int i=0;i<8;i++)
if(i!=q[r].fx){
int xx=q[r].x+_fx[i][0]*a[q[r].x][q[r].y],
yy=q[r].y+_fx[i][1]*a[q[r].x][q[r].y];
if(InMap(xx,yy) && !vis_fx[xx][yy][i]){
vis_fx[xx][yy][i]=true,
q[++h].fx=i,
q[h].x=xx,
q[h].y=yy,
q[h].stp=q[r].stp+1;
if(Arrive(xx,yy)){
// Show_Queue();
printf("%d\n",q[h].stp);
return 0;
}
}
}
r++;
}
// Show_Queue();
printf("NEVER\n");
return 0;
}
在第五个点WA了
感谢!