Advertisement
Dennnhhhickk

Untitled

Jan 22nd, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.28 KB | None | 0 0
  1. program Project2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils;
  7.  
  8. const
  9. MAXIN = 1000;
  10.  
  11. type
  12. mas = record
  13. n1, s1, e1, w1: boolean;
  14. data, colour, go: integer;
  15. end;
  16.  
  17. var
  18. p, last, i, j, n, m, x, y, f, a1, b, z: integer;
  19. a, c: array [-1..MAXIN, -1..MAXIN] of integer;
  20. dp: array [-1 ..MAXIN, -1..MAXIN] of mas;
  21. s, time: string;
  22.  
  23. function min(a, b: integer): integer;
  24. begin
  25. if (a < b) then
  26. min := a
  27. else
  28. min := b;
  29. end;
  30.  
  31. begin
  32. p := 1;
  33. last := 0;
  34. readln(n, m);
  35. for i := 0 to n do
  36. for j := 0 to m do
  37. begin
  38. a[i][j] := -1;
  39. dp[i][j].data := MAXINT - 10;
  40. end;
  41. readln(x, y, f);
  42. readln(a1, b);
  43. for i := n downto 0 do
  44. begin
  45. readln(s);
  46. s := s + ' ';
  47. j := 0;
  48. while (length(s) <> 0) do
  49. begin
  50. time := copy(s, 1, pos(' ', s));
  51. delete(s, 1, pos(' ', s));
  52. if (pos('N', time) <> 0) then
  53. dp[i][j].n1 := true;
  54. if (pos('S', time) <> 0) then
  55. dp[i][j].s1 := true;
  56. if (pos('E', time) <> 0) then
  57. dp[i][j].e1 := true;
  58. if (pos('W', time) <> 0) then
  59. dp[i][j].w1 := true;
  60. inc(j);
  61. end;
  62. end;
  63.  
  64. dp[x][y].data := 0;
  65. dp[x][y].go := 1;
  66.  
  67. for z := 1 to f do
  68. for i := 0 to n do
  69. for j := 0 to m do
  70. if (dp[i][j].go = z) then
  71. begin
  72. if (dp[i][j].n1) and ((dp[i + 1][j].colour <> dp[i][j].colour) or ((dp[i + 1][j].colour = dp[i][j].colour) and (dp[i + 1][j].data > dp[i][j].data))) then
  73. begin
  74. dp[i + 1][j].data := min(dp[i + 1][j].data, dp[i][j].data);
  75. dp[i + 1][j].go := dp[i][j].go + 1;
  76. end
  77. else
  78. if (i < n) and ((dp[i + 1][j].colour <> dp[i][j].colour) or ((dp[i + 1][j].colour = dp[i][j].colour) and (dp[i + 1][j].data > dp[i][j].data))) then
  79. begin
  80. dp[i + 1][j].data := min(dp[i + 1][j].data, dp[i][j].data + 1);
  81. dp[i + 1][j].go := dp[i][j].go + 1;
  82. end;
  83. //______________________________
  84. if (dp[i][j].s1) and ((dp[i - 1][j].colour <> dp[i][j].colour) or ((dp[i - 1][j].colour = dp[i][j].colour) and (dp[i - 1][j].data > dp[i][j].data))) then
  85. begin
  86. dp[i - 1][j].data := min(dp[i - 1][j].data, dp[i][j].data);
  87. dp[i - 1][j].go := dp[i][j].go + 1;
  88. end
  89. else
  90. if (i > 0) and ((dp[i - 1][j].colour <> dp[i][j].colour) or ((dp[i - 1][j].colour = dp[i][j].colour) and (dp[i - 1][j].data > dp[i][j].data))) then
  91. begin
  92. dp[i - 1][j].data := min(dp[i - 1][j].data, dp[i][j].data + 1);
  93. dp[i - 1][j].go := dp[i][j].go + 1;
  94. end;
  95. //______________________________
  96. if (dp[i][j].w1) and ((dp[i][j - 1].colour <> dp[i][j].colour) or ((dp[i][j - 1].colour = dp[i][j].colour) and (dp[i][j - 1].data > dp[i][j].data))) then
  97. begin
  98. dp[i][j - 1].data := min(dp[i - 1][j].data, dp[i][j].data);
  99. dp[i][j - 1].go := dp[i][j].go + 1;
  100. end
  101. else
  102. if (j > 0) and ((dp[i][j - 1].colour <> dp[i][j].colour) or ((dp[i][j - 1].colour = dp[i][j].colour) and (dp[i][j - 1].data > dp[i][j].data))) then
  103. begin
  104. dp[i][j - 1].data := min(dp[i][j - 1].data, dp[i][j].data + 1);
  105. dp[i][j - 1].go := dp[i][j].go + 1;
  106. end;
  107. //____________________________
  108. if (dp[i][j].e1) and ((dp[i][j + 1].colour <> dp[i][j].colour) or ((dp[i][j + 1].colour = dp[i][j].colour) and (dp[i][j + 1].data > dp[i][j].data))) then
  109. begin
  110. dp[i][j + 1].data := min(dp[i + 1][j].data, dp[i][j].data);
  111. dp[i][j + 1].go := dp[i][j].go + 1;
  112. end
  113. else
  114. if (j < m) and ((dp[i][j + 1].colour <> dp[i][j].colour) or ((dp[i][j + 1].colour = dp[i][j].colour) and (dp[i][j + 1].data > dp[i][j].data))) then
  115. begin
  116. dp[i][j + 1].data := min(dp[i][j + 1].data, dp[i][j].data + 1);
  117. dp[i][j + 1].go := dp[i][j].go + 1;
  118. end;
  119. end;
  120. {for i := 0 to n do
  121. begin
  122. for j := 0 to m do
  123. write(dp[i][j].data, ' ');
  124. writeln;
  125. end;}
  126. if (dp[a1][b].data = MAXINT - 10) then
  127. writeln(-1)
  128. else
  129. writeln(dp[a1][b].data);
  130. readln;
  131. readln;
  132. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement