# 2065. Maximum Path Quality of a Graph
###### tags: `Leetcode` `Hard` `Backtracking` `DFS`
Link: https://leetcode.com/problems/maximum-path-quality-of-a-graph/
## 思路
题意的约束中给出了```10 <= timej, maxTime <= 100```,这说明最多只能走10步。又因为There are at most four edges connected to each node,每一步出发最多只有四种选择,所以可以用backtracking穷举
由于quality是算所有unique node的quality之和 所以用set记录之前用过的node (也可以用array)
不能发现现在的node之前用过就不往下走了因为说不定可能有别的分支还没遍历
## Code
```java=
class Solution {
int maxQ = 0;
public int maximalPathQuality(int[] values, int[][] edges, int maxTime) {
List<List<int[]>> graph = new ArrayList<>();
Set<Integer> visited = new HashSet<>();
for(int i=0; i<values.length; i++) graph.add(new ArrayList<>());
for(int[] edge:edges){
graph.get(edge[0]).add(new int[]{edge[1], edge[2]});
graph.get(edge[1]).add(new int[]{edge[0], edge[2]});
}
maxQ = values[0];
backtracking(values, graph, maxTime, visited, 0, 0, 0);
return maxQ;
}
private void backtracking(int[] values, List<List<int[]>> graph, int maxTime, Set<Integer> visited, int currTime, int currQ, int currNode){
if(currTime>maxTime) return;
if(currNode==0){
maxQ = Math.max(maxQ, currQ);
}
for(int[] next:graph.get(currNode)){
if(!visited.contains(next[0])){
visited.add(next[0]);
backtracking(values, graph, maxTime, visited, currTime+next[1], currQ+values[next[0]], next[0]);
visited.remove(next[0]);
}
else{
backtracking(values, graph, maxTime, visited, currTime+next[1], currQ, next[0]);
}
}
}
}
```