Max Min Path
Quetion:
给一个matrix。对于所有从左上到右下的path,找出每一条path的min值。输出所有min值的max。
Analysis
- 用DFS遍历所有edge。
- 对于这道题来说,不记录visited的点,每次只往下或者右走,就可以保证:
- 遍历所有的path(普通DFS只遍历vertex和edge)
- 不会死循环(因为每次只忘右或者下走)
- max用一个global的变量更新。
- min作为parameter path到下一个点去就可以记录每条path的local min
DFS Pesudo code
DFS (graph G, start vertex v)
Mark v as explored
for all edges from v to w in G.adjacentEdges(v) do
if vertex w is not labeled as explored then
recursively call DFS(G,w)
Code
public class MaxMinPath {
private int maxMin = Integer.MIN_VALUE;
public int Solution(int[][] mat){
if(mat.length==0 || mat[0].length==0) return maxMin;
dfs(mat, 0, 0, Integer.MAX_VALUE);
return maxMin;
}
private void dfs(int[][] mat, int i, int j, int minSofar){
int M = mat.length, N = mat[0].length;
//base case: out of bound (need to take care out of bounds first)
if(i==M || j==N) return;
//if not out of bound, update local minimum
minSofar = Math.min(minSofar, mat[i][j]);
//if reach last position, update maximum
if(i==M-1 && j==N-1) {maxMin = Math.max(minSofar, maxMin);}
//explore down and right vertexes
dfs(mat, i+1, j, minSofar);
dfs(mat, i, j+1, minSofar);
}
}
Question
- 遍历所有edge和遍历所有path感觉不是一件事?