讨论 / 求大神教我哪错了
b419334269 2013-12-04 20:47:40
点我顶贴 收藏 删除
const u:array[1..4] of longint=(0,0,-1,1);

v:array[1..4] of longint=(1,-1,0,0);

var head,tail,i,j,n,x1,y1,x2,y2,x,y:longint;

a,f:array[1..1000,1..1000] of longint;

b:array[1..1000000,1..2] of longint;

c:char;

procedure search;

var j:longint;

begin

inc(head);

while head<=tail do

begin

x:=b[head,1]; y:=b[head,2];

for j:=1 to 4 do

if (x+u[j]>0) and (x+u[j]<=n) and (y+v[j]>0) and (y+v[j]<=n) then

if (f[x+u[j],y+v[j]]=0) and (a[x+u[j],y+u[j]]=0) then

begin

inc(tail);

b[tail,1]:=x+u[j];

b[tail,2]:=y+v[j];

f[x+u[j],y+v[j]]:=f[x,y]+1;

if (x+u[j]=x2) and (y+v[j]=y2) then

begin

writeln(f[x2,y2]);

exit;

end;

end;

inc(head);

end;

end;

begin

readln(n);

for i:=1 to n do

begin

for j:=1 to n do

begin

read(c);

a[i,j]:=ord(c)-48;

end;

readln;

end;

readln(x1,y1);

readln(x2,y2);

head:=0; tail:=0;

inc(tail); b[tail,1]:=x1; b[tail,2]:=y1;

a[x1,y1]:=1;

fillchar(f,sizeof(f),0);

search;

end.

#1 shenxingyu@2015-07-07 19:06:56
回复 删除
#include<stdio.h>

#include<stdlib.h>

#include<string.h>

char s[1010][1010];

int a[1010][1010];

int next[5][2]={{0,0},{0,1},{1,0},{0,-1},{-1,0}};

struct note{

int x;

int y;

int s;

};

int book[1010][1010];

int head,tail,flag;

int tx,ty,p,q,sx,sy;

struct note que[1000*1000+10];

int main(){

int i,j,k,m,n;

scanf("%d",&n);

getchar();

for (i=1;i<=n;i++)

gets(s[i]);

for (i=1;i<=n;i++)

for (j=1;j<=n;j++)

a[i][j]=s[i][j]-48;

scanf("%d%d%d%d",&sx,&sy,&p,&q);

tail=head=1;

que[tail].x=sx;

que[tail].y=sy;

que[tail].s=0;

tail++;

while (head<tail){

for (i=1;i<=4;i++){

tx=que[head].x+next[i][0];

ty=que[head].y+next[i][1];

if (tx<=0 || ty<=0 || tx>n || ty>n) continue;

if (book[tx][ty]==0 && a[tx][ty]==0){

book[tx][ty]=1;

que[tail].x=tx;

que[tail].y=ty;

que[tail].s=que[head].s+1;

tail++;

}

if (tx==p && ty==q){

flag=1;

break;

}

}

if (flag) break;

head++;

}

printf("%d\n",que[tail-1].s);

return 0;

}

查看更多回复
提交回复