无向图最小环问题

本文探讨了无向图中寻找至少包含3个节点且边和最小的环的问题,阐述了输入输出格式及数据范围。通过示例输入和输出,解释了解题思路,强调了易错点,并提供了两种不同的解题代码实现。
摘要由CSDN通过智能技术生成

给定一张无向图,求图中一个至少包含3个点的环,环上的节点不重复,并且环上的边的长度之和最小。

该问题称为无向图的最小环问题。

你需要输出最小环的方案,若最小环不唯一,输出任意一个均可。

输入格式
第一行包含两个整数N和M,表示无向图有N个点,M条边。

接下来M行,每行包含三个整数u,v,l,表示点u和点v之间有一条边,边长为l。

输出格式
输出占一行,包含最小环的所有节点(按顺序输出),如果不存在则输出’No solution.’。

数据范围
1≤N≤100,
1≤M≤10000,
1≤l<500
输入样例:
5 7
1 4 1
1 3 300
3 1 10
1 2 16
2 3 100
2 5 15
5 3 20
输出样例:
1 3 5 2
题解:无向图的最小环问题,i—j, k围城一个环,i通过无数个k到达j,这是经过的每条路径,再加上i到j的最短距离,就是最小环的路径长度,当然,这道题不是求长度,而是求路径经过的点,用一个数组记录就好了

这题有一个非常容易错的点。在代码中标注
代码一:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define ll long long
ll a[1010][1010],dis[1010][1010],e[5100],n,nex[1010][1010],m,t1,t2,t3;
int main()
{
   
    while(~scanf("%lld%lld",&n,&m))
    {
   
        memset(a,0x3f,sizeof(a));
        memset(dis,0x3f,sizeof(dis));
        ll i,j,k;
        for(i=1; i<=m; i++)
        {
   
            scanf("%lld%lld%lld",&t1,&t2,&t3);
            dis[t1][t2]=dis[t2][t1]=a[t1][t2]=a[t2][t1]=min(a[t1][t2],t3);
            nex[t1][t2]=t2;
            nex[t2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值