根据总人数建立顶点数量为总人数的无向图,顶点之间有边相连表示两个人相互认识,没有边则表示不认识。对于每一个顶点v,设d(v)表示顶点的度,若d(v)<5,即v认识的人数少于5,则不邀请v,若d(v)>总人数-6,即v认识的人数大于(总人数-6)个,即v不认识的人少于5个,这种情况也不邀请v,给定一个相互配对列表,循环遍历列表,找出不邀请的人,从列表中删除,若找不到删除的人则结束循环,剩下的即为要邀请的人。

 package org.xiu68.ch05.ex10;

 import java.util.ArrayDeque;

 public class Ex5_28 {

     public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] guest=new int[13][13];
//0~5之间相互认识,不认识6~11
//6~11之间相互认识,不认识0~5
//12不认识任何一个人
//结果应该邀请除了12之外的所有人
for(int i=0;i<guest.length-1;i++){
if(i<=5){
for(int j=0;j<guest[i].length-1;j++){
if(j<=5 && i!=j)
guest[i][j]=1;
else
guest[i][j]=0;
}
}else{
for(int j=0;j<guest[i].length-1;j++){
if(j>5 && i!=j)
guest[i][j]=1;
else
guest[i][j]=0;
}
}
}//for
maxGuest(guest, 13);
/*运行结果*/ //邀请的客人为:
//0 1 2 3 4 5 6 7 8 9 10 11
} //guest:客人的相识配对表
//客人总数
public static void maxGuest(int[][] guest,int num){ int invidedNum=num; //记录邀请的人数
boolean[] invided=new boolean[num]; //记录邀请的客人,邀请为true
for(int i=0;i<num;i++)
invided[i]=true; ArrayDeque<Integer> notInvidedQueue=new ArrayDeque<>(); //记录不邀请的客人 do{ for(int i=0;i<notInvidedQueue.size();i++)
invided[notInvidedQueue.poll()]=false; //将不邀请的客人标记为false for(int i=0;i<num && invided[i]==true;i++){
int recognizeNum=0; //第i个人相识的人数
for(int j=0;j<num && invided[j]==true;j++){
if(guest[i][j]==1)
recognizeNum++;
}//for2 //如果认识的人数少于5个
//或者如果认识的人数大于(总人数-6)个,即不认识的人少于5个
//则不邀请这个人
if(recognizeNum<5 || recognizeNum>(invidedNum-6)){
notInvidedQueue.add(i);
invidedNum--;
}
}//for1 }while(!notInvidedQueue.isEmpty()); System.out.println("邀请的客人为:");
for(int i=0;i<num;i++){
if(invided[i])
System.out.print(i+" ");
}
System.out.println();
} }

Ex 5_28 Alice想要举办一个舞会..._第十次作业的更多相关文章

  1. Ex 5_33 实现一个关于公式长度(其中所有文字总的出现次数)为线性时间的Horn公式可满足性问题_第十次作业

    对于所有的蕴含式,生成一张有向图,对于每一个蕴含式,将左边的每一个文字连接到一个中间结点,并用中间结点记录蕴含式左边文字的数量,然后将中间结点连接到蕴含式的右侧结点.例如,对于蕴含式集合 生成的有向图 ...

  2. 单位分配的IP地址和电脑主机绑定了,我想用设置一个无线路由器,让我的笔记本电脑和手机都能上网?

    单位分配的IP地址和电脑主机绑定了,我想用设置一个无线路由器,让我的笔记本电脑和手机都能上网?     配一个无线路由器就可以实现,将电脑IP配置成自动获取,找条网线一头插路由LAN口(路由器上有标明 ...

  3. 假设我的朋友账号分别是v{1,2,3,4,5},且这五人想要共享一个目录,因此应该加入同一个群组,假设这个群组为vbird,且这五个账号的密码均为password.那该如何建置这五个账号?

    假设我的朋友账号分别是v{1,2,3,4,5},且这五人想要共享一个目录,因此应该加入同一个群组,假设这个群组为vbird,且这五个账号的密码均为password.那该如何建置这五个账号?#!/bin ...

  4. 假如想要建设一个能承受500万PV/每天的网站,服务器每秒要处理多少个请求才能应对?

    假如想要建设一个能承受500万PV/每天的网站,服务器每秒要处理多少个请求才能应对?如何计算? 1.PV是什么:PV是page view的简写.PV是指页面的访问次数,每打开或刷新一次页面,就算做一个 ...

  5. 在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色

    原文:在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 例如根据学生的年龄来修改,年龄 ...

  6. VMware 克隆linux后找不到eth0(学习hadoop,所以想快速搭建一个集群)

    发生情况:      由于在学习hadoop,所以想快速搭建一个集群出来.所以直接在windows操作系统上用VMware安装了CentOS操作系统,配置好hadoop开发环境后,采用克隆功能,直接克 ...

  7. 宙斯是一个完整的Hadoop的作业平台[转]

    https://github.com/alibaba/zeus 宙斯(zeus)是什么 宙斯是一个完整的Hadoop的作业平台从Hadoop任务的调试运行到生产任务的周期调度 宙斯支持任务的整个生命周 ...

  8. 《Google想出了一个决定人员晋升的算法,然后就没有然后了......》有感

    Prasad Setty 是 Google People Analytics 团队的副总裁.7 年前 Google 成立的这支团队的职责是收集和利用数据来支撑公司的管理实践.其使命很简单,即基于数据和 ...

  9. 突发奇想想学习做一个HTML5小游戏

    前言: 最近一期文化馆轮到我分享了,分享了两个,一个是关于童年教科书的回忆,一个是关于免费电子书的.最后我觉得应该会不敌web,只能说是自己在这中间回忆了一下那个只是会学习的年代,那个充满梦想的年代. ...

随机推荐

  1. PHP的内存限制 Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in   Fa ...

  2. asp.net 结合本地jQuery使在提交时显示错误提示

    最近在做一个项目,做的表单有的比较长,如果直接点提交,错误提示有时可能用户看不见,对用户体验不好.还有客户端提交有点慢,担心用户重复提交,于是做了个检测用户提交表单验证是否有错误,没错误就提交,且把按 ...

  3. tcp的4次挥手、三次握手

    1. TCP短连接模拟一种TCP短连接的情况:1. client 向 server 发起连接请求2. server 接到请求,双⽅建⽴连接3. client 向 server 发送消息4. serve ...

  4. Shell脚本编写及常见面试题

      注意事项 1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格:多加注释说明. 3)命名建议规则:变量名大写.局部变量小写,函数名小写,名字体现出实际作用. 4)默认变量是全局的, ...

  5. uwsgi多进程配合kafka-python消息无法发送

    在工作中,使用uwsgi部署项目,其中uwsgi设置为多进程,并且python中使用了kafka-python模块作为生产者不断产生数据,但上线不久后几乎所有的生产者消息都报:KafkaTimeout ...

  6. Linux命令之less

    less命令 用处:查看文件,功能强大,随意浏览,查看之前不会预先加载文件 用法:less + 文件名    (按q退出) 示例: 一.查看文档内容 (我这里有一个profile的文件,我想查看里面的 ...

  7. Linux命令之touch

    touch命令 用处:新建文件 (默认是文本,你可以自己加后缀) 用法:在终端中输入touch加上要新建的文件的名字(注意!同一目录下文件夹和文件是不允许同名的) 示例: (新建一个名字叫newfil ...

  8. maven中经常使用的插件

    tomcat插件:非常实用,特点就是不用配置tomcat,可以任意修改端口号. <plugin> <groupId>org.apache.tomcat.maven</gr ...

  9. jenkins在windows平台自动化构建代码

    jenkins服务端:centos6.8 客户端:windows server2012 windows10 工具:cwRsync 注:复制为jenkins工作目录到网站目录,无需服务端. 1.安装je ...

  10. javascript innerHTML、outerHTML、innerText、outerText的区别(转)

    1.功能讲解: innerHTML 设置或获取位于对象起始和结束标签内的 HTML outerHTML 设置或获取对象及其内容的 HTML 形式 innerText 设置或获取位于对象起始和结束标签内 ...