讨论 / 第4个点过不去啊 牛来看下
小牛啃草 2013-08-17 17:38:00
点我顶贴 收藏 删除
program v195;

const

s:array[1..4]of integer=(1,-1,0,0);

t:array[1..4]of integer=(0,0,1,-1);

type

treenode=record

x,y:longint;

end;

var

i,j,k,n,m,top,rear,x1,y1,x2,y2,xx,yy:longint;

ch:char;

map,dis:array[1..2000,1..2000]of longint;

q:array[1..4000000]of treenode;

begin

readln(n,m);

for i:=1 to n do

begin

for j:=1 to m do

begin

read(map[i,j]);

dis[i,j]:=-1;

end;

readln;

end;

readln(x1,y1);

readln(x2,y2);

top:=0;

rear:=1;

q[1].x:=x1;

q[1].y:=y1;

dis[x1,y1]:=0;

while top<rear do

begin

inc(top);

for i:=1 to 4 do

begin

xx:=s[i]+q[top].x;

yy:=t[i]+q[top].y;

if (xx>0)and(xx<=m)and(yy>0)and(yy<=n)and(dis[xx,yy]=-1)

and(map[xx,yy]=0)

then

begin

dis[xx,yy]:=dis[q[top].x,q[top].y]+1;

inc(rear);

q[rear].x:=xx;

q[rear].y:=yy;

end;

if (xx=x2)and(yy=y2)

then break;

end;

end;

if dis[x2,y2]=-1

then writeln('No Answer!')

else writeln(dis[x2,y2]);

end.

状态: Unaccepted

测评机: Xeond[6]

得分: 90分

提交日期: 2010-11-14 11:41:00

有效耗时: 1438毫秒

测试结果1: 通过本测试点|有效耗时172ms

测试结果2: 通过本测试点|有效耗时156ms

测试结果3: 通过本测试点|有效耗时157ms

测试结果4: 输出过长|用户输出数据超过标准输出两倍[标准输出1位|选手输出10位]

测试结果5: 通过本测试点|有效耗时156ms

测试结果6: 通过本测试点|有效耗时157ms

测试结果7: 通过本测试点|有效耗时156ms

测试结果8: 通过本测试点|有效耗时172ms

测试结果9: 通过本测试点|有效耗时156ms

测试结果10: 通过本测试点|有效耗时156ms

#1 Mamba24@2011-07-15 06:35:00
回复 删除
Me too
#2 godd@2011-10-06 05:37:00
回复 删除
边界问题,

测试数据是有解的,而你的program输出NOANSWER!

#3 球威@2012-02-17 04:20:00
回复 删除
同求帮助!!!!!!!

#4 囧TAT囧@2012-02-17 05:26:00
回复 删除
数据规模很小。。。深搜47ms的飘过

不是边界问题就是走回头路来回走了。。

#5 囧TAT囧@2012-02-17 05:28:00
回复 删除
。。。。

#include<stdio.h>//DFS深搜+最优性剪枝

#include<stdlib.h>

int max=100;

int a[2000][2000]={0},n,m;

int beginx,beginy,endx,endy;

int floodfill(int x,int y);

int main()

{

int i,j;

scanf("%d%d",&n,&m);

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

for(j=0;j<m;j++)

{

scanf("%d",&a[i][j]);

a[i][j]*=-1;//放便后面的数步子

}

scanf("%d%d%d%d",&beginx,&beginy,&endx,&endy);

beginx--;

beginy--;

endx--;

endy--;

a[beginx][beginy]++;

floodfill(beginx,beginy);//不用记录步子了,直接染色即可

max--;

if(max==99) printf("No Answer!");

else printf("%d",max);

system("pause");

return 0;

}

int floodfill(int x,int y)//-1为不可到达的点

{

if(a[x][y]>=max) return 0;

if(x==endx&&y==endy&&a[x][y]<max) {max=a[x][y];return 0;}

//上

if(x-1>=0&&a[x-1][y]!=-1)//等下测试是否会存在数组越界的情况,不知道&&先算哪边

{

if(a[x-1][y]==0) {a[x-1][y]=a[x][y]+1;floodfill(x-1,y);}

else

{

if(a[x-1][y]<=a[x][y]+1);

else {a[x-1][y]=a[x][y]+1;floodfill(x-1,y);}

}

}

//下

if(x+1<n&&a[x+1][y]!=-1)

{

if(a[x+1][y]==0) {a[x+1][y]=a[x][y]+1;floodfill(x+1,y);}

else

{

if(a[x+1][y]<=a[x][y]+1);

else {a[x+1][y]=a[x][y]+1;floodfill(x+1,y);}

}

}

//左

if(y-1>=0&&a[x][y-1]!=-1)

{

if(a[x][y-1]==0) {a[x][y-1]=a[x][y]+1;floodfill(x,y-1);}

else

{

if(a[x][y-1]<=a[x][y]+1);

else {a[x][y-1]=a[x][y]+1;floodfill(x,y-1);}

}

}

//右 if(y+1<m&&a[x][y+1]!=-1)

{

if(a[x][y+1]==0) {a[x][y+1]=a[x][y]+1;floodfill(x,y+1);}

else

{

if(a[x][y+1]<=a[x][y]+1);

else {a[x][y+1]=a[x][y]+1;floodfill(x,y+1);}

}

}

}

#6 gtj63@2013-04-09 06:08:00
回复 删除
无语了!!!

后来找到了数据,1*1居然是7……汗死……

#7 O(∩_∩)O钓丝@2013-04-10 03:21:00
回复 删除
program p20;

var

i,j,m:longint;

a,b,c:array[1..100]of longint;

begin

for i:=1 to 7 do

begin

readln(a[i],b[i]);

c[i]:=a[i]+b[i];

end;

for i:=1 to 7 do

if c[i]>m then

begin

m:=c[i];

j:=i;

end;

write(j);

end.

#8 tdw@2013-08-17 17:38:00
回复 删除
问一下,输入数据中每个数之间有木有空格???
#9 2017beijiang99@2018-04-21 05:31:48
回复 删除
回复 #5 囧TAT囧:同志,别人的是pascal;不要给别人C++
查看更多回复
提交回复