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;
    }
};
相关推荐
愚润求学4 分钟前
【动态规划】专题完结,题单汇总
算法·leetcode·动态规划
林太白16 分钟前
跟着TRAE SOLO学习两大搜索
前端·算法
ghie909039 分钟前
图像去雾算法详解与MATLAB实现
开发语言·算法·matlab
云泽80844 分钟前
从三路快排到内省排序:探索工业级排序算法的演进
算法·排序算法
weixin_468466851 小时前
遗传算法求解TSP旅行商问题python代码实战
python·算法·算法优化·遗传算法·旅行商问题·智能优化·np问题
·白小白1 小时前
力扣(LeetCode) ——43.字符串相乘(C++)
c++·leetcode
FMRbpm2 小时前
链表5--------删除
数据结构·c++·算法·链表·新手入门
程序员buddha2 小时前
C语言操作符详解
java·c语言·算法
John_Rey2 小时前
API 设计哲学:构建健壮、易用且符合惯用语的 Rust 库
网络·算法·rust
愿没error的x2 小时前
动态规划、贪心算法与分治算法:深入解析与比较
算法·贪心算法·动态规划