Skip to content

Commit 969a3d3

Browse files
committed
add
1 parent c0fb197 commit 969a3d3

File tree

1 file changed

+17
-22
lines changed

1 file changed

+17
-22
lines changed

uva/1600/src/Main.java

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -48,43 +48,36 @@ private void solveCase() throws IOException {
4848
}
4949

5050

51-
Pos p1 = new Pos(0, 0, 0);
51+
Pos p1 = new Pos(0, 0, 0, k);
5252
dists[0][0] = 0;
5353

5454
PriorityQueue<Pos> pq = new PriorityQueue<>();
5555
pq.add(p1);
56-
int ans = Integer.MAX_VALUE;
56+
int ans = -1;
5757
while (!pq.isEmpty()) {
5858
Pos p = pq.poll();
5959
if (p.x == m - 1 && p.y == n - 1) {
60-
ans = Integer.min(ans, p.dist);
60+
ans = p.dist;
61+
break;
6162
} else {
6263
for (int d = 0; d < 4; d++) {
6364
int ndx = p.x + dx[d];
6465
int ndy = p.y + dy[d];
65-
if (ndx >= 0 && ndx < m && ndy >= 0 && ndy < n && grid[ndx][ndy] == 0 && dists[ndx][ndy] > p.dist + 1) {
66-
dists[ndx][ndy] = p.dist + 1;
67-
Pos np = new Pos(ndx, ndy, p.dist + 1);
68-
pq.add(np);
69-
}
70-
}
71-
for (int v = 1; v <= k; v++) {
72-
for (int d = 0; d < 4; d++) {
73-
int dv = v + 1;
74-
int vdx = p.x + dx[d] * dv;
75-
int vdy = p.y + dy[d] * dv;
76-
if (vdx >= 0 && vdx < m && vdy >= 0 && vdy < n && grid[vdx][vdy] == 0 && dists[vdx][vdy] > p.dist + dv) {
77-
dists[vdx][vdy] = p.dist + dv;
78-
Pos vp = new Pos(vdx, vdy, p.dist + dv);
79-
pq.add(vp);
66+
if (ndx >= 0 && ndx < m && ndy >= 0 && ndy < n && dists[ndx][ndy] > p.dist + 1) {
67+
if (grid[ndx][ndy] == 0) {
68+
dists[ndx][ndy] = p.dist + 1;
69+
Pos np = new Pos(ndx, ndy, p.dist + 1, k);
70+
pq.add(np);
71+
} else if (p.k > 0) {
72+
dists[ndx][ndy] = p.dist + 1;
73+
Pos np = new Pos(ndx, ndy, p.dist + 1, p.k - 1);
74+
pq.add(np);
8075
}
8176
}
8277
}
8378
}
8479
}
85-
if (ans == Integer.MAX_VALUE) {
86-
ans = -1;
87-
}
80+
8881
out.println(ans);
8982
}
9083

@@ -100,11 +93,13 @@ class Pos implements Comparable<Pos> {
10093
int x;
10194
int y;
10295
int dist;
96+
int k;
10397

104-
public Pos(int x, int y, int dist) {
98+
public Pos(int x, int y, int dist, int k) {
10599
this.x = x;
106100
this.y = y;
107101
this.dist = dist;
102+
this.k = k;
108103
}
109104

110105
@Override

0 commit comments

Comments
 (0)