首先介绍下最大团问题

问题描述:给一个无向图G=(V,E) ,V是顶点集合,E是边集合。然后在这顶点集合中选取几个顶点,这几

个顶点任意两个之间都有边在E中。求最多可以选取的顶点个数。这几个顶点就构成一个最大团。

注:最大团可能不唯一。

问题求解思想:这个问题的本质是一个子集选取问题,就是有集合包括n个元素{1,2,…,n}选取其中一个子

集,这个子集满足某种性质(对于最大团问题,就是任意两个顶点之间有边),求这个子集的最大元素数。

每个元素(对应顶点编号)有2种选择,加入或不加入。所以子集个数为2^n个。

这里用回溯的思想求解。

回溯的概念如是理解:在包含所有问题的所有解的解空间树中,从根节点进行深度优先搜索,搜索空间树中

的任一节点的时候,首先判断是否可能包含最优解,如果不包含,就跳过改节点为根的子树的搜索,向其上

一层祖先节点回溯。入包含,则进入该子树,进行深度优先搜索。

部落卫队问题描述:

原始部落中的居民为了争夺资源,常发生冲突。几乎每个居民都有仇敌。酋长为了组织一个部落卫队,希望

从部落居民中选出最多的居民入伍,并保证队伍中任何2个人都不是仇敌。

编程任务:

根据给定的居民间的仇敌关系,编程计算出部落卫队的最佳方案。

数据输入:

第1行2个整数n,m表示部落中居民个数,居民中有m个仇敌关系。居民编号1,2,…,n。接下来m行,每行2

个整数u,v表示居民u和v是仇敌。

数据输出:

第1行是最佳方案中部落卫队的人数,第2行是卫队组成xi, 1=<i<=n,

import java.util.Scanner;

public class buluoweidui {
public static int N=100; //默认定义数组大小
static int[][] a=new int[N][N]; //图用邻接矩阵表示
static int [] x=new int[N]; //是否将第i个节点加入团中
static int [] bestx=new int[N]; //记录最优解
static int bestn; //记录最优值
static int cn; //当前已放入团中的节点数量
static int n,m; //n为图中节点数 m为图中边数 public static void main(String [] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入部落的人数n(节点数):");
n=sc.nextInt();
System.out.println("请输入人与人的友好关系(边数):");
m=sc.nextInt();
System.out.println("请依次输入有友好关系的两个人(有边相连的两个节点u,v)用空格分开:");
int u,v; //有边相连的两个节点u,v
for(int i=1;i<=m;i++) {
u=sc.nextInt();
v=sc.nextInt();
a[u][v]=a[v][u]=1; //边数为1
} bestn=0; //初始最优值为0
cn=0; //初始的团中节点也为0
backTrack(1); //从第一个节点进行深度搜索
System.out.println("国王护卫队的最大人数为:"+bestn);
System.out.println("国王护卫队的成员:");
for(int i=0;i<=n;i++) {
if(bestx[i]==1) //打印最优解中记录为1的节点标号
System.out.print(i+" ");
}
} /*进行深度搜索*/
private static void backTrack(int t) { //t:当前扩展节点在第t层
if(t>n) { //达到根节点 记录可行解 并记录此时节点数目
for(int i=1;i<=n;i++)
bestx[i]=x[i];
bestn=cn;
return;
} if(place(t)) { //判断是否满足约束条件(边是否连通)-->左子树-->把节点加入团中
x[t]=1; //左子树 标记为1
cn++; //当前节点数+1 backTrack(t+1); //继续搜索t+1层
cn--; //回溯 加多少就减多少 回退
} if(cn+ n-t> bestn) { //满足限界条件 -->右子数
x[t]=0;
backTrack(t+1);
}
}
private static boolean place(int t) { //判断是否可以把节点t加入团中
boolean ok=true;
for(int j=1;j<t;j++) {
if(x[j]==1 && a[t][j]==1) {
ok=false;
break;
}
}
return ok;
} }

(Java实现) 最大团问题 部落卫队的更多相关文章

  1. 洛谷——P1692 部落卫队

    题目描述 原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍,并保证队伍中任何2 个 ...

  2. 洛谷 P1692 部落卫队

    P1692 部落卫队 题目描述 原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍, ...

  3. Luogu P1692 部落卫队

    解题思路 数据范围不是很大,那应该不是那些普遍的图论的算法.考虑搜索,用暴力解决.从1到N枚举每一个点的位置,搜索这个点事选还是不选.如果在这个点之前选到的点中又和他冲突的点,那就不选,要么就选. 附 ...

  4. 洛谷 P1692 【部落卫队】

    啊这道题其实暴力就行了,算是一道搜索入门题吧. 搜索变量就应该是当前到哪一位了,然后进行枚举,当前的一位加或者不加,然后知道搜完为止. 判断当前一位可不可以加的时候本来想用vector的,但是没调出来 ...

  5. (Java实现) 图的m着色问题

    图的m着色问题 [问题描述] 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的m着色问 ...

  6. java内存占用问题(一)

    Nocturne 2012-12-24 java数组内存占用问题. 30 Contact[] ca = new Contact[10];   while(x<10){     ca[x]=new ...

  7. [翻译]Python——十年语言之冠

    最近我发现了这个PYPL——编程语言流行指数.它对各种语言的流行指标进行了二次发掘.作者指出TIOBE指数很可能不能反映出真实情况,归咎于一些编程语言的名称会导致误解.他引入了一些新术语,利用谷歌趋势 ...

  8. Python---十年语言之首

    这个图表的数据非常的有意思,没有大起大浮并不是件坏事,这表明不断的有群体(来自Java和PHP——一个大部落)希望学习这种语言.Python是唯一一个在这个图表上表现的与众不同的语言. 我们都知道,P ...

  9. 2021软工-CSDN APP分析

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 提升软件开发能力,提高团队协作能力 这个作业在哪个具体方面 ...

随机推荐

  1. FOC中的Clarke变换和Park变换详解(动图+推导+仿真+附件代码)

    文章目录 1 前言 2 自然坐标系ABC 3 αβ\alpha\betaαβ 坐标系 3.1 Clarke变换 3.2 Clarke反变换 4 dqdqdq 坐标系 4.1 Park变换 正转 反转 ...

  2. elasticsearch kibana的安装部署与简单使用(一)

    1.先说说es 我早两年使用过es5.x的版本,记得当时部署还是很麻烦,因为es是java写的,要先在机器上部署java环境jvm之类的一堆东西,然后才能安装es 但是现在我使用的是目前最新的7.6版 ...

  3. EOS基础全家桶(十一)智能合约IDE-EOS_Studio

    简介 我们马上要进入智能合约的开发了,以太坊最初提供了智能合约的功能,并宣告区块链进入2.0时代,而EOS的智能合约更进一步,提供了更多的便利性和可能性.为了进一步了解智能合约,并进行开发,我们需要先 ...

  4. docker build报错

    docker build 遇到问题 "can  not stat ... APPData\Local\Application Data" 解决方法:

  5. Rabbitmq 整合Spring,SpringBoot与Docker

    SpringBootLearning是对Springboot与其他框架学习与研究项目,是根据实际项目的形式对进行配置与处理,欢迎star与fork. [oschina 地址] http://git.o ...

  6. java ->网络通信协议(UDP协议、TCP协议)

    网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规 ...

  7. C# 数据操作系列 - 7. EF Core 导航属性配置

    在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑.在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等.这一篇将为大家细细分析一下,如何设 ...

  8. 轻松扩展机器学习能力:如何在Rancher上安装Kubeflow

    随着机器学习领域不断发展,对于处理机器学习的团队来说,在1台机器上训练1个模型已经有些难以为继,并且现在业界的共识是机器学习已经不仅仅是简单的模型训练. 在模型训练之前.过程中和之后,需要进行许多活动 ...

  9. Python的概述

    官网:https://www.python.org/ 诞生:1989年底诞生,1990年V1发布,2000年V2发布,2008年V3发布(不兼容V2),2017年随着AI的崛起而流行 特点:简单.跨平 ...

  10. Django之templates模板

    模板渲染: 官方文档:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for 模板渲染两种 ...