Leetcode 1761. Minimum Degree of a Connected Trio in a Graph (图好题)

  1. Minimum Degree of a Connected Trio in a Graph
    Hard

You are given an undirected graph. You are given an integer n which is the number of nodes in the graph and an array edges, where each edges[i] = [ui, vi] indicates that there is an undirected edge between ui and vi.

A connected trio is a set of three nodes where there is an edge between every pair of them.

The degree of a connected trio is the number of edges where one endpoint is in the trio, and the other is not.

Return the minimum degree of a connected trio in the graph, or -1 if the graph has no connected trios.

Example 1:

Input: n = 6, edges = [[1,2],[1,3],[3,2],[4,1],[5,2],[3,6]]

Output: 3

Explanation: There is exactly one trio, which is [1,2,3]. The edges that form its degree are bolded in the figure above.

Example 2:

Input: n = 7, edges = [[1,3],[4,1],[4,3],[2,5],[5,6],[6,7],[7,5],[2,6]]

Output: 0

Explanation: There are exactly three trios:

  1. 1,4,3\] with degree 0.

  2. 5,6,7\] with degree 2.

2 <= n <= 400

edges[i].length == 2

1 <= edges.length <= n * (n-1) / 2

1 <= ui, vi <= n

ui != vi

There are no repeated edges.

解法1:临接矩阵

cpp 复制代码
class Solution {
public:
    int minTrioDegree(int n, vector<vector<int>>& edges) {
        vector<vector<int>> matrix(n + 1, vector<int>(n + 1));
        vector<int> counter(n + 1);
        int res = INT_MAX;
        for (auto &edge : edges) {
            matrix[min(edge[0], edge[1])][max(edge[0], edge[1])] = 1;
            ++counter[edge[0]];
            ++counter[edge[1]];
        }
        for (auto i = 1; i <= n; i++) {
            for (auto j = i + 1; j <= n; j++) {
                if (matrix[i][j]) {
                    for (auto k = j + 1; k <= n; k++) {
                        if (matrix[i][k] && matrix[j][k]) {
                            res = min(res, counter[i] + counter[j] + counter[k] - 6);
                        }
                    }
                }
            }
        }
        return res == INT_MAX ? -1 : res;
    }
};
相关推荐
mmz12073 分钟前
分治算法(c++)
c++·算法
睡一觉就好了。23 分钟前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
Tansmjs1 小时前
C++编译期数据结构
开发语言·c++·算法
金枪不摆鳍1 小时前
算法-字典树
开发语言·算法
diediedei1 小时前
C++类型推导(auto/decltype)
开发语言·c++·算法
独断万古他化1 小时前
【算法通关】前缀和:从一维到二维、从和到积,核心思路与解题模板
算法·前缀和
loui robot1 小时前
规划与控制之局部路径规划算法local_planner
人工智能·算法·自动驾驶
格林威1 小时前
Baumer相机金属焊缝缺陷识别:提升焊接质量检测可靠性的 7 个关键技术,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·堡盟相机
你撅嘴真丑2 小时前
第八章 - 贪心法
开发语言·c++·算法
VT.馒头2 小时前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript