全体员工玩分组游戏,前面五分钟大家分头找队友,并将每个人找到的队友信息汇报给主持人,如果A和B是队友,B和C是队友,那么A和C也是队友;接着主持人不断地随机抽取两个人,希望判断二者是否为队友。请设计一个计算机程序辅助主持人判断两个人是否为队友,说明程序的关键算法,不需要代码实现。
例如:<小明,小王>,<小军,小王>,<小丽,小李>是队友,那么小军和小明是队友,小军和小丽不是队友。
解: 本问题是图的算法问题。
要判断A和B是不是好朋友,该问题就归结为判断A到B是否有通路,利用图的深度优先遍历即可,即:从A出发进行深度优先遍历,如果有B则是好朋友;如果没有遍历到B则不是好朋友。
算法复杂度为O(n)。
package org.jyjiao;
import java.util.*;
import java.util.List;
class Vertex {
String data;
boolean isVisited;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public boolean isVisited() {
return isVisited;
}
public void setVisited(boolean isVisited) {
this.isVisited = isVisited;
}
}
class Edge {
String strFrom;
String strTo;
public Edge(String strFrom, String strTo) {
this.strFrom = strFrom;
this.strTo = strTo;
}
String getFrom() {
return this.strFrom;
}
String getTo() {
return this.strTo;
}
}
class Graph {
HashMap<String, List<String>> gMap = new HashMap<String, List<String>>();
HashMap<String, Boolean> isVisitMap = new HashMap<String, Boolean>();
public Graph() {
gMap = this.createGraph();
}
HashMap<String, List<String>> createGraph() {
isVisitMap.put("小明", false);
isVisitMap.put("小军", false);
isVisitMap.put("小王", false);
isVisitMap.put("小丽", false);
isVisitMap.put("小李", false);
List<String> list1 = new ArrayList<String>();
list1.add("小明");
list1.add("小军");
gMap.put("小王", list1);
List<String> list2 = new ArrayList<String>();
list2.add("小王");
gMap.put("小明", list2);
List<String> list3 = new ArrayList<String>();
list3.add("小王");
gMap.put("小军", list3);
List<String> list5 = new ArrayList<String>();
list5.add("小丽");
gMap.put("小李", list5);
List<String> list6 = new ArrayList<String>();
list6.add("小李");
gMap.put("小丽", list6);
return gMap;
}
Edge getFirstEdge(String vertex) {
List<String> list = gMap.get(vertex);
String firstTo = list.get(0);
return new Edge(vertex, firstTo);
}
Edge getNextEdge(Edge edge) {
String eFrom = edge.getFrom();
String eTo = edge.getTo();
List<String> list = gMap.get(eFrom);
int pos = list.indexOf(eTo) + 1;
if (pos < list.size()) {
eTo = list.get(pos);
return new Edge(eFrom, eTo);
}
return null;
}
public boolean isConnect(String vFrom, String vTo) {
isVisitMap.put(vFrom, new Boolean(true));
boolean ret=false;
for (Edge e = getFirstEdge(vFrom); e != null; e = getNextEdge(e)) {
String eTo = e.getTo();
if (eTo == vTo) {
ret = true;
break;
} else {
if (!(isVisitMap.get(eTo).booleanValue())){
isConnect(eTo, vTo);
}
}
}
return ret;
}
}
public class IsFriend {
public static void main(String[] args) {
Graph graph = new Graph();
boolean isFriend = graph.isConnect("小李", "小丽");
if (isFriend) {
System.out.println("they are friends");
} else {
System.out.println("they are not friends");
}
}
}
分享到:
相关推荐
【2022年市场-队友软件开发方式和互联网在线服务部门的合作】 在当前的市场环境中,软件开发方式和互联网在线服务部门的合作已经成为至关重要的议题。传统的软件开发方法,如SDM 341(Scrum)框架,强调的是敏捷...
3分钟搭建企业管理系统
在这个高度竞技化的环境中,辅助队友的功能变得尤为重要,其中就包括了为队友加血的机制。本文将详细讲解一个名为"按E给队友加血插件"的功能,以及如何在CS1.6中进行安装和配置。 首先,我们需要了解这个插件的核心...
综上所述,"Team-Mates Finder"是一个综合运用JavaScript、Riot API以及数据处理技术的创新应用,它为英雄联盟玩家提供了便捷的找队友途径,体现了现代互联网应用开发的技术魅力。对于开发者来说,这样的项目不仅...
1.将BDhotkey.vpk这个文件放到游戏的addons目录 2.重新运行游戏,并打开控制台 3.输入指令 exec zb_bd,回车 4.如果安装指令正确会在输入exec zb_时就能提示后面的指令. -----大键盘----- ...[5键] 复活队友
概述:捕获视频和屏幕截图、发表评论并与您的队友分享以在上下文中进行协作。 与气泡、屏幕截图和屏幕录像机轻松协作。 描述: 捕获视频和屏幕截图、发表评论并与您的队友分享以在上下文中进行协作。 与气泡、屏幕...
sketch-measure, 为开发者和队友创建规范是一个有趣的事情 草图测量的新特性: 导出图层对规格的影响。图层矩形的影响包括阴影和外部边框,它与导出图像的大小完全相同。 有时,阴影不会由工程师实现,它应该是图像...
"排版(技术活,交给最擅长的队友!!).rar"这个压缩包文件很可能包含了一系列与排版相关的资源或教程,旨在帮助团队成员提升排版技能。 排版技术的核心在于视觉层次的构建,它涉及到字体选择、字号调整、行距设置...
登录您的管理员,主持人和其他队友,以提高服务器安全性 执照 该插件已在许可下获得!由supercrafter333插件! 待办事项 | -------------------------- | 虫子 | ------------ [如果发现错误,请发布错误] ---------...
名称:Bullet Journal(记录想法) ---------------------------------------- 版本:3.5.0 ...分类:实用工具 ...与朋友和队友一起编辑项目符号列表 •使用链接即时分享您的项目符号列表 •轻松邀请
在IT行业中,尤其是在团队协作和数据安全领域,Linux系统提供了许多强大的工具来满足需求。"teamcrypt"就是这样一个工具,专为Linux环境设计,旨在帮助团队成员之间安全地共享加密数据。这个开源项目允许用户创建...
在这个游戏中,约定双升信号是一种合法的战术,允许队友通过出牌传递信息,以提高配合的效率和准确性。以下是对双升级约定规则的详细解释: 一、合法与非法信息 合法信息是指在出牌过程中,通过正常技巧或公开约定...
然而,这个压缩包似乎提供了一个人独自游玩的功能,让玩家可以在没有队友的情况下享受游戏。 描述中的“还在担心队友跑图,自己无法安心刷怪吗?”暗示了该应用可能解决了游戏中常见的问题——队友可能提前移动到...
孟实习生 TeaMONion团队实习生项目 创建Timong订购系统 分支惯例 1.分支主管->开发 设定发展目标后分支发展 2.分支开发->作业组功能任务(例如,FE-login-init) 从开发分支到工作按功能划分分支 ...
作为队友:每个英雄与其他英雄的协同效果如何? 作为敌人:每个英雄与其他英雄对抗多少 src/main/resources下的文件team_graph和enemy_graph描述了这些关系。 为了找到所谓的Meta,随机的两支队伍被初始化,轮流改变...
这个项目是由MWS-Group-9成员和队友建立的 安装过程 第一步: 使用cmd git clone存储库,或将整个存储库以zip格式下载,然后将其解压缩到本地计算机中所需的任何位置 第二步: 完成第一步后,导航到/src文件夹,...
同步dotenv松弛使.env与Slack上的队友保持同步 虽然将.env.example文件提交给源代码管理可能有助于让队友知道项目启动和运行需要某些环境变量,但让他们获取这些值可能会很麻烦。 更糟糕的是,当这些值(或变量)中...
1、显示队友目标及职业图标,等级,队友目标可以拖动; 2、显示队友施法条; 3、显示队友职业图标和等级; 4、添加暴雪风格的焦点目标显示。 5、如果目标职业不是玩家,则显示目标的种类图标(人型生物的种类...
Skillz可让您全面了解队友的所有技能。 执照 Skillz已获得。 如何 Skillz可与Docker和Docker Compose一起使用,您需要在计算机上安装Docker和Docker Compose。 参见docker-compose.yml 。 运行Skillz 创建数据库...
《Express-henry:亨利队友的JavaScript快递框架解析》 Express-henry,这个名称源于著名足球运动员Thierry Henry(亨利)的名字,是一个专门为JavaScript开发的Web应用程序框架,它基于Node.js平台,旨在简化后端...