回溯法--最大团问题

news2024/11/20 4:42:51

问题描述

什么是最大团?最大团的定义?

完全图:如果无向图中的任何一对顶点之间都有一条边,这种无向图称为完全图。

完全子图:给定无向图G=(V,E)。如果U⊆V,且对任意u,v⊆U 有(u,v) ⊆ E,则称U 是G 的完全子图。

团(最大完全子图): U是G的团当且仅当U不包含在G 的更大的完全子图中

最大团:G 的最大团是指G中所含顶点数最多的团。

空子图:给定无向图G=(V,E)。如果U⊆V,且对任意u,v⊆U 有(u,v) ∉ E,则称U 是G 的空子图。G的空子图U是G的独立集当且仅当U不包含在G的更大空子图中。

独立集:对于给定无向图G=(V,E)。如果顶点集合V*⊆V,若V*中任何两个顶点均不相邻,则称V*为G的点独立集,或简称独立集。

最大独立集:G中所含顶点数最多的独立集。

无向图G的最大团问题 和 最大独立集问题都可以用回溯法在的时间内解决。

图G的最大团问题可以看做是图G的顶点集V的子集选取问题

回溯法有两种模板--子集树和排列树。最大团问题就可以用子集树来表示问题的解空间。

问题分析

设当前扩展节点Z位于解空间树的第i层,进入左子树前(选取这个点i),必须确认从点i到已经选入的点集中的每一个点都有边相连。进入右子树前(不选择这个点i),必须确认还有足够多的可以选择的点,使得有可能在右子树中找到更大的团。

详细描述

思路:首先设最大团为一个空团,往其中加入一个顶点,然后依次考虑每个顶点,查看该顶点加入团之后仍然构成一个团,如果可以,考虑将该顶点加入团,或者舍弃两种情况,如果不行,直接舍弃,然后递归判断下一顶点。对于无连接或者直接舍弃两种情况,在递归前,可采用剪枝策略来避免无效搜索。

判断条件:为了判断当前顶点加入团之后是否仍是一个团,只需要考虑该顶点和团中顶点是否都有连接。

剪枝策略:如果剩余未考虑的顶点数加上团中顶点数不大于当前解的顶点数,可停止继续深度搜索,否则继续深度递归。

书上的伪代码是这样的:

首先定义一下初始的变量

回溯主函数:

还是很有回溯框架--子集树模板的样子,思考清楚进入左子树和进入右子树的条件,剪枝,(单层遍历逻辑)就可以轻而易举拿下了。

//最大团问题
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxnum = 101;
bool a[maxnum][maxnum]; //图的邻接矩阵
bool x[maxnum];         //当前解
int cn;                 //当前团的顶点数
int bestn;              //当前的最优解
int n;                  //图G的顶点数
int e;                  //图G的边数
void display(){
    for (int j = 1; j <= n; j++){
        if (x[j] == true) printf("%d ", j);
    }
    printf("\n");
}
void backtrack(int i){
    int j;
    if (i > n)//到达叶子节点
    {
        bestn = cn;//更新最优值
        printf("%d\n", bestn);//输出详细的信息
        display();
        return;
    }
    bool ok = true;
    for (j = 1; j < i; j++){
        if (x[j] && !a[j][i]) {// i与j不相连
            ok = false;
            break;
        }
    }
    //检查是否这个点与其他所有顶点都有边相连,符合条件,进入左子树
    if (ok){
        cn++;
        x[i] = true;
        backtrack(i + 1);//检查下一个顶点
        cn--;//还原现场
    }
    if (cn + n - i > bestn) //剪枝
    {
        x[i] = false;
        backtrack(i + 1);
    }
}

int main(){
    int i, u, v;
    //初始化
    memset(a, false, sizeof(a));
    memset(x, false, sizeof(x));
    scanf("%d%d", &n, &e); // 定点数,边数
    for (i = 0; i < e; i++)
    {
        scanf("%d%d", &u, &v);
        a[u][v] = true;
        a[v][u] = true;
    }
    cn = bestn = 0;
    backtrack(1);
    return 0;
}

/*
5 7
1 2
1 4
1 5
2 5
2 3
3 5
4 5
*/

又是一道回溯法的题目,和最优装载这个问题及其相似

相似--最优装载

分析:第一艘船尽可能装的多,还是一个子集的选取问题

思路分析:

子集树分析结束~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZigBee 3.0实战教程-Silicon Labs EFR32+EmberZnet-5-02:串口发送数据-hello world

【源码、文档、软件、硬件、技术交流、技术支持&#xff0c;入口见文末】 【所有相关IDE、SDK和例程源码均可从群文件免费获取&#xff0c;免安装&#xff0c;解压即用】 持续更新中&#xff0c;欢迎关注&#xff01; 前面《ZigBee 3.0实战教程-Silicon Labs EFR32EmberZnet-5…

90 后学霸博士 8 年进击战:用机器学习为化工研究叠 BUFF

本文首发自微信公众号&#xff1a;HyperAI超神经 内容一览&#xff1a;ScienceAI 作为近两年的技术热点&#xff0c;引起了业界广泛关注和讨论。本文将围绕 ScienceAdvances 的一篇论文&#xff0c;介绍如何利用机器学习&#xff0c;对燃煤电厂的胺排放量进行预测。 关键词&…

初始化一个GCP项目并用gcloud访问操作

1 简介 谷歌云GCP&#xff08;Google Cloud Platform&#xff09;是由Google提供的云平台&#xff0c;还是为用户提供了许多免费的产品&#xff0c;还是可以尝试一下的。对于学习或者小项目&#xff0c;都可以使用。 2 创建一个新项目 要使用GCP&#xff0c;我们需要创建一个…

【日常业务开发】常用JSON库API

【日常业务开发】常用JSON库APIGsonJava 对象转 Json字符串(序列化)Json字符串转Java 对象(反序列化)FastJsonJava 对象转 Json字符串(序列化)Json字符串转Java 对象(反序列化)JacksonJava 对象转 Json字符串(序列化)Json字符串转Java 对象(反序列化)Json 字符串内容反序列化为…

计算机网络各层设备故障及可行的解决方案

计算机网络分层 我们采用某五层模型进行研究 根据有关资料的统计&#xff0c;网络发生故障具体分布为&#xff1a; 应用层占3%&#xff1b; 表示层占7%&#xff1b; 会话层占8%&#xff1b; 传输层占10%&#xff1b; 网络层占12%&#xff1b; 数据链路层占25%&#xff…

大数据开发-Linux操作

目录1.1 touch:创建空文件1.2 mv :move 剪切粘贴--重命名和移动功能1.3 cat命名&#xff1a;查看文件内容1.4 cp &#xff1a;copy 复制粘贴1.5 ps、kill、ifconfig、clear1.6 回顾&#xff1a;1.1 touch:创建空文件 touch a.txt b.txt — 创建空文件a.txt与b.txt touch /root…

数据结构与算法(二)——递归算法

目录 前言 递归算法 1、什么是递归算法 2、核心理念 3、代码演示 4、问题探讨&#xff1a;只递不归会怎样&#xff1f; 5、小结 递归实例&#xff1a;汉诺塔问题 1、故事引入 2、移动盘子的逻辑 3、N个盘子的移动分析 4、代码实现N个盘子的移动 5、汉诺塔移动次数计…

文本到图像模型,如何快速生成高质量图片? #Google Muse AI

AIGC 的存在&#xff0c;大大提高了创作者的生产效率&#xff0c;目前&#xff0c;市面上也出现了许多快速生成图像的 AI 图像模型。近日&#xff0c;谷歌的 Muse AI 系统亮相&#xff0c;使用 AI 生成图片又多了一个选择工具&#xff01;Google Muse AI 图源&#xff1a;Muse …

【参考答案】java基础练习:选择结构(if、switch)

if&#xff1a;if...else...及if嵌套 提示用户输入三个整数&#xff0c;判断并输出最大值、最小值 package com.qzcsbj;import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner input new Scanner(System.in);System.out.print("…

【正点原子FPGA连载】第十二章U-Boot移植 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十二章U-Boot移…

CVR预估模型ESMM

1. 概述 一般在对CVR建模的过程中&#xff0c;正样本选择的是在点击后有转化的样本作为正样本&#xff0c;负样本则是在点击后没有转化的样本作为负样本。然而&#xff0c;这样的建模方式存在一定的问题&#xff1a; Sample Selection Bias&#xff08;SSB&#xff09;问题&a…

ArcGIS基础实验操作100例--实验90创建点、线、面要素混合的Voronoi

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 空间分析篇--实验90 创建点、线、面要素混合的Voronoi 目录 一、实验背景 二、实验数据 三、实验步骤 …

回收租赁商城系统功能拆解08讲-售后退款

回收租赁系统适用于物品回收、物品租赁、二手买卖交易等三大场景。 可以快速帮助企业搭建类似闲鱼回收/爱回收/爱租机/人人租等回收租赁商城。 回收租赁系统支持智能评估回收价格&#xff0c;后台调整最终回收价&#xff0c;用户同意回收后系统即刻放款&#xff0c;用户微信零…

使用nginx和ffmpeg搭建HLS流媒体服务器

使用nginx和ffmpeg搭建HLS流媒体服务器 文章目录使用nginx和ffmpeg搭建HLS流媒体服务器1 安装ffmpeg2 安装nginx3 nginx有关HLS参数配置ffmpeg进行HLS切片VLC播放验证最近研究HLS流媒体协议&#xff0c;需要临时搭建HLS服务器&#xff0c;这里记录下搭建的过程(操作系统&#x…

计算机制图设计教程-以全国降水处理为例

前言本博客主要是通过一幅完整数字地图的制作过程&#xff0c;巩固计算机制图内容&#xff0c;报告中涉及到了地图数字化、空间数据的存储与管理、空间数据库的建立、符号化、制图综合技术和空间分析等内容。从而锻炼自身的动手实践能力&#xff0c;了解一幅地图制作设计的完整…

2022年江西省首届职业院校教师数字经济职业技能比赛“信息安全”赛项竞赛任务书

2022年江西省首届职业院校教师数字经济职业技能比赛“信息安全”赛项竞赛任务书 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 90分钟 200分 A-2 数据库加固 A-3 服务加固 A-4 防火墙策略 B模块 B-1 Windows操作系统渗透测试 400分 B…

云间玉兔,自出机抒,从零开始制作Web插件网页特效小兔子组件(小挂件widget),基于原生CSS/NPM

著意登楼瞻玉兔&#xff0c;何人张幕遮银阙&#xff1f;又到了一年一度的网页小挂件环节&#xff0c;以往我们都是集成别人开源的组件&#xff0c;但所谓熟读唐诗三百首&#xff0c;不会做诗也会吟&#xff0c;熟读了别人的东西&#xff0c;做几首打油诗也是可以的&#xff0c;…

数据降维-MDS 算法

数据降维-MDS 算法 文章目录数据降维-MDS 算法算法概述算法步骤算法证明代码参考算法概述 MDS的初衷是将图结构中的距离在空间的一种表示。 例如&#xff0c;已知几个城市的距离&#xff0c;但是不知道城市的坐标&#xff0c;那么MDS就能通过距离矩阵转换成空间坐标向量来近似…

mock的基本使用

mock的基本使用官网文档mockjs是用来模拟产生一些虚拟的数据&#xff0c;可以让前端在后端接口还没有开发出来时独立开发&#xff0c;mockjs可以拦截ajax请求&#xff0c;返回设定好的数据。注意&#xff1a;mock&#xff08;模拟数据&#xff09;数据需要使用到mockjs模块&…

如何用更好的创意引发卖家和消费者的共鸣?

我们知道&#xff0c;近年来国家的政策越来越向创新型的企业发展倾斜&#xff0c;因此各行各业都响应政策&#xff0c;做创新型高质量发展&#xff0c;跨境电商作为疫情下应运而生的产物&#xff0c;其本身就带有创新型发展的概念&#xff0c;同时&#xff0c;面对着2022年许多…