56分求助
  • 板块P2130 狂奔的Wzf
  • 楼主aliah
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/23 16:27
  • 上次更新2025/1/23 19:37:43
查看原帖
56分求助
1095195
aliah楼主2025/1/23 16:27

广搜,WA了2,6,7,8

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,m,i,j,k,l,x,y,t=1,u[10000000],v[10000000];
	cin>>n>>m;
	char a[n+1][m+2];
	int b[n+1][m+1];
	for(i=1;i<=n;i++)
		cin>>a[i]+1; 
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			b[i][j]=0x7fffffff;
	b[1][1]=0;
	u[0]=1;
	v[0]=1;
	for(l=0;l<t;l++)
	{
		x=u[l];
		y=v[l];
		for(k=1;k+y<=m;k++)
		{
			if(a[x][y+k]=='X')
				break;
			if((k&k-1)==0 && b[x][y+k]>b[x][y]+1)
			{
				b[x][y+k]=b[x][y]+1;
				u[t]=x;
				v[t]=y+k;
				t++;
			}
		}
		x=u[l];
		y=v[l];
		for(k=1;y-k>=0;k++)
		{
			if(a[x][y-k]=='X')
				break;
			if((k&k-1)==0 && b[x][y-k]>b[x][y]+1)
			{
				b[x][y-k]=b[x][y]+1;
				u[t]=x;
				v[t]=y-k;
				t++;
			}
		}
		x=u[l];
		y=v[l];
		for(k=1;k+x<=n;k++)
		{
			if(a[x+k][y]=='X')
				break;
			if((k&k-1)==0 && b[x+k][y]>b[x][y]+1)
			{
				b[x+k][y]=b[x][y]+1;
				u[t]=x+k;
				v[t]=y;
				t++;
			}
		}
		x=u[l];
		y=v[l];
		for(k=1;x-k>=0;k++)
		{
			if(a[x][x-k]=='X')
				break;
			if((k&k-1)==0 && b[x-k][y]>b[x][y]+1)
			{
				b[x-k][y]=b[x][y]+1;
				u[t]=x-k;
				v[t]=y;
				t++;
			}
		}
	} 
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]=='#')
			{
				if(b[i][j]==0x7fffffff)
					cout<<-1;
				else
					cout<<b[i][j];
				return 0;
			}
}
2025/1/23 16:27
加载中...