---
# System prepended metadata

title: 2077. Paths in Maze That Lead to Same Room
tags: [Leetcode, Medium, Graph]

---

# 2077. Paths in Maze That Lead to Same Room
###### tags: `Leetcode` `Medium` `Graph`
Link: https://leetcode.com/problems/paths-in-maze-that-lead-to-same-room/description/
## 思路 $O(VE)$
### 方法一
从每个点开始 找到他们往下两步能到的点 如果和起点一样 那么答案就加一
### 方法二
对于每一个corridor的两个点
检查他们所能连到的点是否有重合的 如果有意味着confusing score要加1
为了避免重复 例如一个corridor是```(a,b) a<b``` ```graph[a]```里面会有```b``` ```graph[b]```没有```a```
## Code
### 方法一
```python=
class Solution:
    def numberOfPaths(self, n: int, corridors: List[List[int]]) -> int:
        graph = collections.defaultdict(set)
        ans = 0
        for a, b in corridors:
            graph[a].add(b)
            graph[b].add(a)
        
        def dfs(cur, start, depth):
            nonlocal ans
            if depth == 3:
                if start in graph[cur]:
                    ans += 1
                return
            
            for nextNode in graph[cur]:
                if nextNode<cur: continue
                dfs(nextNode, start, depth+1)


        for i in range(1, n+1):
            dfs(i, i, 1)
        
        return ans
```
### 方法二
```python=
class Solution:
    def numberOfPaths(self, n: int, corridors: List[List[int]]) -> int:
        graph = defaultdict(set)
        for a, b in corridors:
            if a<b: graph[a].add(b)
            else: graph[b].add(a)
        
        ans = 0
        for a, b in corridors:
            ans += len(graph[a].intersection(graph[b]))
        return ans
```
```java=
class Solution {
    public int numberOfPaths(int n, int[][] corridors) {
        Map<Integer, Set<Integer>> graph = new HashMap<>();
        for(int i=1; i<=n; i++){
            graph.put(i, new HashSet<>());
        }
        for(int[] e:corridors){
            if(e[0]<e[1]) graph.get(e[0]).add(e[1]);
            else graph.get(e[1]).add(e[0]);
        }
        int ans = 0;
        for(int[] e:corridors){
            Set<Integer> s1 = graph.get(e[0]);
            Set<Integer> s2 = graph.get(e[1]);
            for(int k:s1){
                if(s2.contains(k)) ans++;
            }
        }
        return ans;
    }
}
```