社区讨论

求救!!为什么爆零???

P1301魔鬼之城参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi6vd254
此快照首次捕获于
2025/11/20 11:26
4 个月前
此快照最后确认于
2025/11/20 11:26
4 个月前
查看原帖
CPP
#include<iostream>
#include<cstdio>
#include<queue>

using namespace std;
struct www
{
	long x;
	long y;
};
queue<www > r;
long dx[9]={0,1,1,0,-1,-1,-1,0,1};
long dy[9]={0,0,1,1,1,0,-1,-1,-1};
long n,m,p[101][101],ans[101][101],minn=1<<30;
bool bj[101][101][9];
void bFs(long x,long y)
{
	www a;
	a.x=x;
	a.y=y;
	r.push(a);
	ans[x][y]=1;
	while(!r.empty())
	{
		www s=r.front();
		r.pop();
		for(int i=1;i<=8;++i)
		{
			long nx=s.x+dx[i]*p[s.x][s.y];
			long ny=s.y+dy[i]*p[s.x][s.y];
			if(!bj[nx][ny][i] && nx<=n && ny<=m && nx>=1 && ny>=1)
			{
				www o;
				o.x=nx;
				o.y=ny;
				r.push(o);
				bj[nx][ny][i]=true;
				ans[nx][ny]=ans[s.x][s.y]+1;
				if(s.x==n && s.y==m)
				return ;
			//	printf("(%ld %ld)-->(%ld %ld)\n",s.x,s.y,nx,ny);
			}
		}
	}
}
int main()
{
//	freopen("mgzc.in","r",stdin);
//	freopen("mgzc.out","w",stdout);
	scanf("%ld%ld",&n,&m);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
			scanf("%ld",&p[i][j]);
	bFs(1,1);
	printf("%ld",ans[n][m]);
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...