# 1810. Minimum Path Cost in a Hidden Grid
###### tags: `Leetcode` `Medium` `Dijkstra` `DFS`
Link: https://leetcode.com/problems/minimum-path-cost-in-a-hidden-grid/
## 思路
先dfs建图 然后dijkstra
## Code
```java=
class Solution {
int[][] dirs = new int[][]{{-1,0},{0,1},{0,-1},{1,0}};
char[] charDir = new char[]{'U', 'R', 'L', 'D'};
int[] target;
int edge = 201;
public int findShortestPath(GridMaster master) {
int[][] map = new int[edge][edge];
boolean[][] visited = new boolean[edge][edge];
visited[edge/2][edge/2] = true;
dfs(master, map, visited, edge/2, edge/2);
if(target==null) return -1;
return dijk(master, map, edge/2, edge/2);
}
private void dfs(GridMaster master, int[][] map, boolean[][] visited, int x, int y){
if(master.isTarget()){
target = new int[]{x,y};
}
for(int i=0; i<dirs.length; i++){
int[] dir = dirs[i];
int nextx = x+dir[0];
int nexty = y+dir[1];
if(master.canMove(charDir[i]) && !visited[nextx][nexty]){
map[nextx][nexty] = master.move(charDir[i]);
visited[nextx][nexty] = true;
dfs(master, map, visited, nextx, nexty);
master.move(charDir[3-i]);
}
}
}
private int dijk(GridMaster master, int[][] map, int x, int y){
Queue<int[]> pq = new PriorityQueue<>((a,b)->(a[2]-b[2]));
Integer[][] cost = new Integer[edge][edge];
pq.add(new int[]{x,y,0});
while(!pq.isEmpty()){
int[] curr = pq.poll();
if(curr[0]==target[0] && curr[1]==target[1]) return cost[curr[0]][curr[1]];
for(int[] dir:dirs){
int nextx = curr[0]+dir[0];
int nexty = curr[1]+dir[1];
if(nextx>=0 && nextx<edge && nexty>=0 && nexty<edge && map[nextx][nexty]!=0){
int dist = curr[2]+map[nextx][nexty];
if(cost[nextx][nexty]==null || dist<cost[nextx][nexty]){
cost[nextx][nexty] = dist;
pq.add(new int[]{nextx, nexty, cost[nextx][nexty]});
}
}
}
}
return -1;
}
}
```