90分求助
查看原帖
90分求助
246684
DvdBr3o楼主2020/11/13 18:11
//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了

感谢!

2020/11/13 18:11
加载中...