跳到内容
相关文章

相关文章

在一个给定图中构成一个三角形的三个节点的最小度
  • 最后更新:07年5月,2021年5月

给定一个无向图组成的N顶点和m边和数组边缘[][],每个行代表由边缘连接的两个顶点,任务是找到形成a的三个节点的最小度图中的三角形。如果没有任何三角形图形然后打印“1”

例子:

输入:N = 7,边缘=[[1,2],[1,3],[2、3],[1,4],[2、5],[2、7],[3、6],[3、7]]
输出:4.
解释:以下是上图的表示:

有两个连接的三角形:



  1. 由节点{1,2,3}组成的节点。三角形的度= 5。
  2. 第二个三角形由节点{2,3,7}组成。三角形的度= 4。

最小次数是4。

输入:n = 6,边缘= [[1,2],[1,3],[2,3],[1,6],[3,4],[4,5]]
输出:2

方法:给定的问题可以解决发现的程度每个组成三角形和的节点的三重集合计算每个节点的度数在那个三角形。按照以下步骤解决问题:

以下是实施上述方法:

C ++




// c++程序的上述方法
# include <比特/ stdc + + . h >
使用 名称空间 性病;
//求最小度数
//图中一个连通三角形的
int minTrioDegree ( int n,
矢量< < int > > &边缘)
{
//存储每个节点的度数
//在图表中
int 学位[n + 1] = {0};
的表示形式
//图的邻接矩阵
int adj [n + 1] [n + 1] = {0};
//创建邻接矩阵和
//计算节点的程度
为了 int 我= 0;我< Edges.size ();I ++){
// u和v是的端点
// ith边缘
int U =边缘[i] [0];
int v =边缘[i] [1];
//标记边缘即,
//边u->v和v->u
Adj [u][v] = Adj [v] = 1;
//度数增加1
//两个结束节点
学位[u] ++;
学位[v] ++;
}
//存储所需的结果
int ans = INT_MAX;
//遍历第一个节点
为了 int 我= 1;我<= n;I ++){
//遍历第二节点
为了 int J = I + 1;j < = N;j + +) {
//如果之间存在边缘
//这两个节点
如果 (adj[i][j] == 1) {
//遍历所有可能的
/ /第三个节点
为了 int K = j + 1;
k <= n;k ++){
//如果有边界
//第三节点之间
//和前两个
如果 (adj[我][k] = = 1
&& adj[j][k] == 1) {
//更新ans.
ans = min (ans,
学位(我)
+学位[j]
+ degree[k] - 6);
}
}
}
}
}
//返回结果
返回 ans == int_max?-1:ANS;
}
/ /驱动程序代码
int main ()
{
矢量< < int > >边缘;
边= {{1,2},{1,3},
{2,3},{1,4},
{2,5},{2,7},
{3,6}, {3,7}};
int n = 7;
cout << minTrioDegree(N, Edges);
返回 0;
}

              
输出:
4.

时间复杂性:3.
辅助空间:2

我的个人笔记 arrow_drop_up
推荐的文章
页 :