求助80分dfs #3#9
查看原帖
求助80分dfs #3#9
590571
_weishiqi66_楼主2023/9/26 13:56
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
const int fx[8]={0,0,1,-1,1,-1,1,-1};
const int fy[8]={1,-1,0,0,1,-1,-1,1};
int n,m,a[N][N],ans=0;//ans=0x3f3f3f3f;
int f[N][N][10];
struct code{
	int x,y,s,l;
};
queue<code> q;
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	code s;s.x=1,s.y=1,s.s=0,s.l=-1;
	q.push(s);
	while(!q.empty()){
		code tmp=q.front(); q.pop();
		if(tmp.x==n&&tmp.y==m){
			ans=tmp.s;
			break;
		}
		for(int i=0;i<8;i++){
			if(i==tmp.l) continue;
			int k=a[tmp.x][tmp.y];
			code b;
			b.x=tmp.x+k*fx[i];
			b.y=tmp.y+k*fy[i];
			b.s=tmp.s+1;
			b.l=i;
			if(b.x<1||b.y<1||b.x>n||b.y>m) continue;
			if(f[b.x][b.y][i]) continue;
			f[b.x][b.y][i]=1;
			q.push(b);
		}
	}
	if(ans==0x3f3f3f3f) cout<<"NEVER";
	else cout<<ans;
	
	return 0;
}
2023/9/26 13:56
加载中...