社区讨论
56分求助
P2130狂奔的Wzf参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m692m9xf
- 此快照首次捕获于
- 2025/01/23 16:28 去年
- 此快照最后确认于
- 2025/11/04 10:49 4 个月前
广搜,WA了2,6,7,8
CPP#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;
}
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...