Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project2;
- {$APPTYPE CONSOLE}
- uses
- SysUtils;
- const
- MAXIN = 1000;
- type
- mas = record
- n1, s1, e1, w1: boolean;
- data, colour, go: integer;
- end;
- var
- ans, last, i, j, n, m, x, y, f, a1, b, z: integer;
- a, c: array [-1..MAXIN, -1..MAXIN] of integer;
- p: array [-1 ..MAXIN, -1..MAXIN] of mas;
- dp: array [-1..4000, -1..100, -1..100] of integer;
- s, time: string;
- function min(a, b: integer): integer;
- begin
- if (a < b) then
- min := a
- else
- min := b;
- end;
- begin
- last := 0;
- readln(m, n);
- readln(y, x, f);
- readln(b, a1);
- for i := 0 to n do
- for j := 0 to m do
- begin
- p[i][j].n1 := false;
- p[i][j].s1 := false;
- p[i][j].w1 := false;
- p[i][j].e1 := false;
- for z := 0 to f do
- dp[z][i][j] := MAXINT - 10;
- end;
- for i := n downto 0 do
- begin
- readln(s);
- s := s + ' ';
- j := 0;
- while (length(s) <> 0) do
- begin
- time := copy(s, 1, pos(' ', s));
- delete(s, 1, pos(' ', s));
- if (pos('N', time) <> 0) then
- p[i][j].n1 := true;
- if (pos('S', time) <> 0) then
- p[i][j].s1 := true;
- if (pos('E', time) <> 0) then
- p[i][j].e1 := true;
- if (pos('W', time) <> 0) then
- p[i][j].w1 := true;
- inc(j);
- end;
- end;
- dp[f][x][y] := 0;
- for z := f downto 0 do
- for i := 0 to n do
- for j := 0 to m do
- begin
- if (p[i][j].n1) then
- dp[f - 1][i + 1][j] := min(dp[f - 1][i + 1][j], dp[f][i][j])
- else
- dp[f - 1][i + 1][j] := min(dp[f - 1][i + 1][j], dp[f][i][j] + 1);
- if (p[i][j].s1) then
- dp[f - 1][i - 1][j] := min(dp[f - 1][i - 1][j], dp[f][i][j])
- else
- dp[f - 1][i - 1][j] := min(dp[f - 1][i - 1][j], dp[f][i][j] + 1);
- if (p[i][j].w1) then
- dp[f - 1][i][j - 1] := min(dp[f - 1][i][j - 1], dp[f][i][j])
- else
- dp[f - 1][i][j - 1] := min(dp[f - 1][i][j - 1], dp[f][i][j] + 1);
- if (p[i][j].e1) then
- dp[f - 1][i][j + 1] := min(dp[f - 1][i][j + 1], dp[f][i][j])
- else
- dp[f - 1][i][j + 1] := min(dp[f - 1][i][j + 1], dp[f][i][j] + 1);
- end;
- ans := MAXINT - 10;
- for z := 0 to f do
- if (dp[z][a1][b] < ans) then
- ans := dp[z][a1][b];
- writeln(ans);
- readln;
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement