https://leetcode.com/problems/loud-and-rich/description/
题目大意:题目意思比较不好理解,看着样例会比较好理解。简单表述下,给你一张有向图,每个节点上又一个val,问对于每个节点,能到达这个节点的val最小的节点的编号。
解题思路:从每个点出发深搜,答案就是回溯的过程
class Solution {
private void dfs(int x,int[][] mp,int[] quiet,int[] res)
{
int n =quiet.length;
for(int i=0;i<n;i++)
{
if(mp[x][i]==1)
{
// System.out.println(x+" "+i);
dfs(i,mp,quiet,res);
if( quiet[res[x]] > quiet[res[i]])
res[x] =res[i];
mp[x][i] =-1;
}
}
}
public int[] loudAndRich(int[][] richer, int[] quiet) {
int n = quiet.length;
int[] res = new int[n];
int[][] mp = new int[n][n];
for(int i=0;i<n;i++)
{
Arrays.fill(mp[i],-1);
res[i] =i;
}
for(int i=0;i<richer.length;i++)
{
mp[richer[i][1]][richer[i][0]] = 1;
}
for(int i=0;i<n;i++)
{
dfs(i,mp,quiet,res);
System.out.println("!!");
}
return res;
}
}