matlab-贪婪算法寻找最小覆盖

文章目录


一、最小结点集是什么

最小覆盖集 (也称为最小点覆盖集)是图论中的一个重要概念,指的是一个节点子集,使得图中的每一条边都与这个子集中的至少一个节点关联。简单来说,最小覆盖集是一个节点集合,它能够"覆盖"或"触及"到图中的每一条边。

二、贪婪算法实现查找最小结点集

代码

matlab 复制代码
function S = greedyVertexCover(A)  
    % greedyVertexCover: 使用贪心算法找到一个图的顶点覆盖集  
    % A: 图的邻接矩阵,其中A(i,j)=1表示顶点i和顶点j之间有边相连,A(i,j)=0表示没有边  
    % S: 找到的顶点覆盖集  
  
    % 获取图的顶点数  
    n = size(A, 1);  
      
    % 初始化顶点覆盖集S为空  
    S = [];  
      
    % 初始化所有边都未覆盖  
    edgesToCover = A;  
      
    % 当还有未覆盖的边时  
    while ~all(edgesToCover(:) == 0) % 检查是否所有边都已被覆盖  
        % 找到一个未覆盖边数最多的顶点(贪心选择)  
        maxEdges = 0;  
        v = 0;  
          
        % 遍历所有顶点  
        for i = 1:n  
            % 如果顶点i还未在S中且至少有一个相邻边未覆盖  
            if ~any(S == i) && any(edgesToCover(i, :))  
                % 计算顶点i覆盖的未覆盖边数  
                numCovered = sum(edgesToCover(i, :));  
                % 如果顶点i覆盖的未覆盖边数多于当前最多的,则更新  
                if numCovered > maxEdges  
                    maxEdges = numCovered;  
                    v = i;  
                end  
            end  
        end  
          
        % 确保v是一个有效的正整数索引  
        if v > 0 && v <= n  
            % 将选择的顶点v加入顶点覆盖集S  
            S = [S, v];  
              
            % 标记与顶点v相邻的边为已覆盖  
            edgesToCover(v, :) = 0; % 设置为0表示边已被覆盖  
            edgesToCover(:, v) = 0; % 对于无向图,双向标记  
        else  
            error('无法找到有效的顶点索引v'); % 如果v无效,则抛出错误  
        end  
    end  
end  
  
matlab 复制代码
% 示例:创建一个图的邻接矩阵并找到其顶点覆盖集  
% 邻接矩阵表示的图  
A = [0 1 1 0 0;  
     1 0 1 1 0;  
     1 1 0 1 1;  
     0 1 1 0 1;  
     0 0 1 1 0];  
  
% 调用函数找到顶点覆盖集  
S = greedyVertex(A);  
disp('Vertex Cover Set:');  
disp(S);

结果

相关推荐
sheeta199814 分钟前
LeetCode 每日一题笔记 日期:2026.06.02 题目:3635. 最早完成陆地和水上游乐设施的时间 II
笔记·算法·leetcode
Lsk_Smion31 分钟前
力扣实训 _ [102].层序遍历--前序--后续_递归与非递归的实现
数据结构·算法·leetcode
小欣加油2 小时前
leetcode3751 范围内总波动值I
java·数据结构·c++·算法·leetcode
Halo_tjn3 小时前
反射与设计模式1
java·开发语言·算法
V搜xhliang02464 小时前
临床科研新范式:从选题到投稿,AI智能体如何接管全流程?
运维·数据结构·人工智能·算法·microsoft·数据挖掘·自动化
计算机安禾4 小时前
【算法分析与设计】第46篇:近似难度与不可近似性理论
网络协议·算法·ssl
小bo波5 小时前
Java Swing 可视化素数筛:动态演示 1~120 质数筛选【附完整源码】
java·算法·可视化·swing·素数
imDwAaY5 小时前
贝叶斯网络到粒子滤波Python算法实现 CS188 Proj4 学习笔记
网络·人工智能·笔记·python·学习·算法
sleven fung5 小时前
Whisper库
开发语言·人工智能·python·算法·ai·whisper
Black蜡笔小新5 小时前
自动化AI算法训练服务器DLTM零代码私有化一站式AI训练平台技术解析
人工智能·算法·自动化