比赛 NOIP2008集训模拟3 评测结果 AEWEEEEEEA
题目名称 移动骷髅 最终得分 20
用户昵称 name:弓虽 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2008-11-12 11:29:37
显示代码纯文本
  1. program klgame(input,output);
  2. type
  3. sz=array [0..6,0..6] of '0'..'2';
  4. var
  5. i,j,k:longint;
  6. n:longint;
  7. map:sz;
  8.  
  9. procedure find(map:sz);
  10. var
  11. line:array [1..1000] of sz;
  12. step:array [1..1000] of longint;
  13. head,tail:longint;
  14. i,j,k:longint;
  15. f:boolean;
  16. begin
  17. head:=0;
  18. tail:=1;
  19. line[1]:=map;
  20. f:=false;
  21. while (head<tail) and (not(f))
  22. do begin
  23. inc(head);
  24. for i:=1 to 5 do
  25. for j:= 1 to 5 do
  26. begin
  27. if line[head,i,j]<>'0' then begin
  28. for k:=i-2 downto 1 do
  29. if line[head,k,j]<>'0' then begin
  30. inc(tail);
  31. line[tail]:=line[head];
  32. line[tail,k+1,j]:=line[head,i,j];
  33. line[tail,i,j]:='0';
  34. step[tail]:=step[head]+1;
  35. if line [tail,3,3]='2' then
  36. begin
  37. f:=true;
  38. writeln(step[tail]);
  39. break;
  40. end;
  41. end;
  42. for k:=i+2 to 5 do
  43. if line[head,k,j]<>'0' then begin
  44. inc(tail);
  45. line[tail]:=line[head];
  46. line[tail,k-1,j]:=line[head,i,j];
  47. line[tail,i,j]:='0';
  48. step[tail]:=step[head]+1;
  49. if line [tail,3,3]='2' then
  50. begin
  51. f:=true;
  52. writeln(step[tail]);
  53. break;
  54. end;
  55. end;
  56. for k:=j-2 downto 1 do
  57. if line[head,i,k]<>'0' then begin
  58. inc(tail);
  59. line[tail]:=line[head];
  60. line[tail,i,k+1]:=line[head,i,j];
  61. line[tail,i,j]:='0';
  62. step[tail]:=step[head]+1;
  63. if line [tail,3,3]='2' then
  64. begin
  65. f:=true;
  66. writeln(step[tail]);
  67. break;
  68. end;
  69. end;
  70. for k:=j+2 to 5 do
  71. if line[head,i,k]<>'0' then begin
  72. inc(tail);
  73. line[tail]:=line[head];
  74. line[tail,i,k-1]:=line[head,i,j];
  75. line[tail,i,j]:='0';
  76. step[tail]:=step[head]+1;
  77. if line [tail,3,3]='2' then
  78. begin
  79. f:=true;
  80. writeln(step[tail]);
  81. break;
  82. end;
  83. end;
  84. end;
  85. if (f) then break;
  86. end;
  87. if (f) then break;
  88. end;
  89. end;
  90.  
  91.  
  92.  
  93. begin
  94. assign(input,'klgame.in');
  95. assign(output,'klgame.out');
  96. reset(input);
  97. rewrite(output);
  98. readln(n);
  99.  
  100. for i:=1 to n do
  101. begin
  102. for j:=1 to 5 do
  103. begin
  104. for k:=1 to 5 do
  105. read(map[j,k]);
  106. readln;
  107. end;
  108. writeln('level ',i,':');
  109. if map[3,3]='2' then writeln('0')
  110. else find(map);
  111. readln;
  112. end;
  113. close(input);
  114. close(output);
  115. end.