Kio_ @ 2018-12-26 12:49:09
只过了一个点
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n;
int a[1050][1050];
int m[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int x1,y1,x2,y2;
int h=0,t=1;
struct s
{
int x;
int y;
int num=0;
}d[10000000];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
string c;
cin>>c;
for(int j=0;j<c.size();j++)
{
a[i][j]=c[j]-'0';
}
}
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
x1--;y1--;x2--;y2--;
d[0].x=x1;d[0].y=y1;
while(h<=t)
{
a[d[h].x][d[h].y]=1;
if(d[h].x==x2&&d[h].y==y2)return !printf("%d",d[h].num);
for(int i=0;i<4;i++)
{
int dx=d[h].x+m[i][0],dy=d[h].y+m[i][1];
if(dx>=0&&dx<n&&dy>=0&&dy<n&&a[dx][dy]==0)
{
d[t].x=dx;
d[t].y=dy;
d[t].num=d[h].num+1;
t++;
}
}
h++;
// if(d[h].x+1<n&&a[d[h].x+1][d[h].y]==0)
// {
// d[t].x=d[h].x+1;
// d[t].y=d[h].y;
// d[t].num=d[h].num+1;
// t++;
// }
// if(d[h].x-1>=0&&a[d[h].x-1][d[h].y]==0)
// {
// d[t].x=d[h].x-1;
// d[t].y=d[h].y;
// d[t].num=d[h].num+1;
// t++;
// }
// if(d[h].y+1<n&&a[d[h].x][d[h].y+1]==0)
// {
// d[t].x=d[h].x;
// d[t].y=d[h].y+1;
// d[t].num=d[h].num+1;
// t++;
// }
// if(d[h].y-1>=0&&a[d[h].x][d[h].y-1]==0)
// {
// d[t].x=d[h].x;
// d[t].y=d[h].y-1;
// d[t].num=d[h].num+1;
// t++;
// }
// h++;da
}
}
by ywy_c_asm @ 2018-12-26 13:27:31
@kill_ 您算一下数组占的内存就会发现爆空间了……