zhizhenzqs @ 2024-08-20 09:09:33
#include <bits/stdc++.h>
using namespace std;
int n,c[1000010][3];
char a[2010][1010];
int fx[5]={0,0,1,0,-1};
int fy[5]={0,1,0,-1,0};
//void shi(int x,int y,int k){
// if()
//
//
//}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
int xx,yy,sx,sy;
cin>>xx>>yy>>sx>>sy;
int i=1,t=1;
c[1][0]=xx;
c[1][1]=yy;
c[1][2]=0;
while(i<t||t==1)
{
int x=c[i][0];
int y=c[i][1];
int k=c[i][2];
a[x][y]='1';
if(x==sx&&y==sy)
{
cout<<k;
return 0;
}
for(int q=1;q<=4;q++)
{
int tx=x+fx[q];
int ty=y+fy[q];
if(a[tx][ty]=='0');
{
c[++t][0]=tx,c[t][1]=ty;
c[t][2]=k+1;
}
}
i++;
// for(int q=1;q<=n;q++)
// {
// for(int w=1;w<=n;w++)
// {
// cout<<a[q][w]<<' ';
// }cout<<endl;
// }
}
}
by Whitecrane @ 2024-08-20 09:12:57
来咯
#include<bits/stdc++.h>
using namespace std;
char a[1100][1100];
int m,n;
int sx,sy,ex,ey;
int fx[5]={0,0,1,0,-1};
int fy[5]={0,1,0,-1,0};
int q[1000300][4];
int main()
{
int h=1,t=1;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
cin>>sx>>sy>>ex>>ey;
a[sx][sy]='1';
q[1][1]=sx;
q[1][2]=sy;
q[1][3]=0;
int tx,ty;
while(h<=t){
for(int i=1;i<=4;i++){
tx=q[h][1]+fx[i];
ty=q[h][2]+fy[i];
if(a[tx][ty]=='0'){
a[tx][ty]='1';
t++;
q[t][1]=tx;
q[t][2]=ty;
q[t][3]=q[h][3]+1;
if(tx==ex&&ty==ey){
cout<<q[t][3]<<endl;
return 0;
}
}
}
h++;
}
}
by LikablePie79015 @ 2024-08-20 09:15:05
@zhizhenzqs
把格子标记为 '1'
应该在判断那个格子能走之后就立马标记,否则可能导致一个格子重复走很多次。
by zhizhenzqs @ 2024-08-20 11:01:22
已a xie xie @LikablePie79015