tyvj P1232 - 跳格子II

P1232 - 跳格子II

From Admin    Normal (OI) 总时限:10s    内存限制:128MB

背景 Background

tyvj20100613比赛,祝大家取得好成绩。^-^

描述 Description

小msh长大之后,渐渐发现原来的跳格子游戏实在是太沙茶了,既没有挑战性,也没有乐趣,还经常被不明真相的群众围观……所以,她决定修改跳格子的规则,让它看起来没那么沙茶…… 依然是在地上画一个n*m的方格,但msh在某些格子里放上高度为1的箱子。她每次可以从一个格子跳到与它相邻的另一个格子中,如果这两个格子的高度相同,msh只需要付出1单位力气;如果这两个格子高度不同,则需要付出2单位力气。她想从某个格子跳到另一个格子,但她想用尽量少的力气。虽然msh长大了,但她还是有点沙茶……算了半天也没有算出来到底需要多少力气才能跳完……那么你来帮帮她吧!

输入格式 InputFormat

第一行两个正整数n和m,表示方格的行数和列数。 接下来n行,每行m个格子(用“.”和“*”表示),“.”表示这个格子上没有箱子,“*”表示有箱子。 接下来一行四个整数x1,y1,x2,y2,表示msh想从第x1行y1列的格子跳到第x2行y2列的格子。

输出格式 OutputFormat

一行一个整数,表示最少需要多少力气跳完。

样例输入 SampleInput [复制数据]

4 6
.**...
..*...
..*.*.
....*.
1 1 4 6

样例输出 SampleOutput [复制数据]

10

数据范围和注释 Hint

对于20%的数据,1<=n,m<=10; 对于50%的数据,1<=n,m<=300; 对于100%的数据,1<=n,m<=500.

时间限制 TimeLimitation

各个测试点1s
program tyv1232; type node=record x,y:longint; end; const max=1000000; var f:array[1..500,1..500] of longint; mark:array[1..500,1..500] of boolean; a:array[1..500,1..500] of char; q:array[0..max] of node; d:array[1..4] of integer=(1,-1,0,0); l:array[1..4] of integer=(0,0,-1,1); head,tail,i,j,n,m,x1,x2,y1,y2,xx,yy:longint; k:node; procedure push(x,y:longint); begin inc(head); q[head].x:=x;q[head].y:=y; mark[x,y]:=true; end; function pop:node; begin pop:=q[tail]; inc(tail); end; begin readln(n,m); for i:=1 to n do begin for j:=1 to m do read(a[i,j]); readln; end; readln(x1,y1,x2,y2); fillchar(mark,sizeof(mark),false); for i:=1 to n do for j:=1 to m do f[i,j]:=maxlongint; f[x1,y1]:=0; head:=0;tail:=1; push(x1,y1); while head>=tail do begin k:=pop; for i:=1 to 4 do begin xx:=k.x+d[i];yy:=k.y+l[i]; if (xx<=n)and(xx>=1)and(yy>=1)and(yy<=m) then begin if (a[xx,yy]=a[k.x,k.y])and(f[xx,yy]>f[k.x,k.y]+1) then begin f[xx,yy]:=f[k.x,k.y]+1; if not mark[xx,yy] then push(xx,yy); end else if (f[xx,yy]>f[k.x,k.y]+2)and(a[xx,yy]<>a[k.x,k.y]) then begin f[xx,yy]:=f[k.x,k.y]+2; if not mark[xx,yy] then push(xx,yy); end; end; end; mark[k.x,k.y]:=false; end; writeln(f[x2,y2]); end.

posted on 2012-10-30 18:56  馒头~blue  阅读(284)  评论(0编辑  收藏  举报

导航