面试算法116:朋友圈

题目

假设一个班级中有n个学生。学生之间有些是朋友,有些不是。朋友关系是可以传递的。例如,A是B的直接朋友,B是C的直接朋友,那么A是C的间接朋友。定义朋友圈就是一组直接朋友或间接朋友的学生。输入一个n×n的矩阵M表示班上的朋友关系,如果M[i][j]=1,那么学生i和学生j是直接朋友。请计算该班级中朋友圈的数目。
例如,输入数组[[1,1,0],[1,1,0],[0,0,1]],学生0和学生1是朋友,他们组成一个朋友圈;学生2一个人组成一个朋友圈。因此,该班级中朋友圈的数目是2。

分析

一个班级可以包含一个或多个朋友圈,对应的图中可能包含一个或多个子图,每个朋友圈对应一个子图。因此,这个问题可以转化为如何求图中子图的数目。
图的搜索算法可以用来计算图中子图的数目。扫描图中所有的节点。如果某个节点v之前没有访问过,就搜索它所在的子图。当所有节点都访问完之后,就可以知道图中有多少个子图。
在这里插入图片描述

解:应用图搜索解决问题

public class Test {public static void main(String[] args) {int[][] M = {{1, 1, 0}, {1, 1, 0}, {0, 0, 1}};int result = findCircleNum(M);// 记录朋友圈的数目System.out.println(result);}public static int findCircleNum(int[][] M) {boolean[] visited = new boolean[M.length];int result = 0;for (int i = 0; i < M.length; i++) {if (!visited[i]) {// 如果某个学生i对应的节点之前没有访问过,则调用函数findCircle访问他所在朋友圈对应子图的所有节点findCircle(M, visited, i);result++;}}return result;}private static void findCircle(int[][] M, boolean[] visited, int i) {Queue<Integer> queue = new LinkedList<>();queue.add(i);visited[i] = true;while (!queue.isEmpty()) {int t = queue.remove();for (int friend = 0; friend < M.length; friend++) {if (M[t][friend] == 1 && !visited[friend]) {queue.add(friend);visited[friend] = true;}}}}}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

直播美颜SDK开发指南:美颜功能设计

直播美颜技术对于提升用户满意度和吸引观众至关重要。本文将深入探讨直播美颜SDK的开发指南&#xff0c;聚焦于美颜功能的设计与实现。 一、美颜功能的重要性 直播美颜功能不仅仅是为了满足用户的虚荣心&#xff0c;更是为了提升用户的自信心和直播质量。一个优秀的美颜功能能…

【linux基础I/O(二)】文件系统讲解以及文件缓冲区的概念

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 基础I/O 1. 前言2. 理解C语言…

【抓包教程】BurpSuite联动雷电模拟器——安卓高版本抓包移动应用教程

前言 近期找到了最适合自己的高版本安卓版本移动应用抓HTTP协议数据包教程&#xff0c;解决了安卓低版本的问题&#xff0c;同时用最简单的办法抓到https的数据包&#xff0c;特此进行文字记录和视频记录。 前期准备 抓包工具&#xff1a;BurpSuite安卓模拟器&#xff1a;雷…

第8章-第2节-Java中IO流的简单介绍

1、什么是流 我们可以先想象水流是怎样的&#xff1f;溪水不断流动&#xff0c;最终融入大海&#xff1b;我们今天的学习IO其实如同水流一样&#xff0c;当我们读取文件信息或者写入信息时&#xff0c;如同水流一样&#xff0c;不断读取或者写入&#xff0c;直到业务流程结束。…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例3-1 CSS3过渡

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>CSS3 过渡</title> <style> /*显示*/ .box {width: 100px;height: 100px;background-color: #eee;/*透明度*/opacity: 1;/*过渡*/transition: 3s; } /…

软件分发点(DP)的合理规划

软件分发点&#xff08;Distribution Point, DP&#xff09;是用于托管文件以分发到计算机和移动设的服务器&#xff0c;Jamf Pro可以通过分发点分发以下类型的文件&#xff1a; 软件包 脚本 内部应用程序 内部书籍 Jamf Pro支持两种类型的分发点&#xff0c;您可以使用这些类型…

怎么挑选一体化污水处理设备

选择一体化污水处理设备是一个关键决策&#xff0c;它直接影响到污水处理系统的效能和运行成本。随着环保意识的日益提高&#xff0c;各种污水处理设备也不断地涌现出来。那么&#xff0c;在众多选项中&#xff0c;如何挑选一体化污水处理设备&#xff1f;本文将为您提供一些建…

leetcode17 电话号码的字母组合

方法1 if-else方法 if-else方法的思路及其简单粗暴&#xff0c;如下图所示&#xff0c;以数字234为例&#xff0c;数字2所对应的字母是abc&#xff0c;数字3所对应的是def&#xff0c;数字4所对应的是ghi&#xff0c;最后所产生的结果就类似于我们中学所学过的树状图一样&…

《共建开源》系列:Airtest-Framework - UI自动化框架系统

Airtest- Framework 平台简介 Airtest- Framework 是 基于 unittest、Flask、Airtest 搭建的 开源的 UI 自动化框架系统 提供 HTTP API 接口&#xff0c;实现自动解析包名并自动执行 相应目录下的 Case。目前仅支持单台设备连接。多个任务会自动排队处理。 系统要求 Pytho…

【C++进阶06】红黑树图文详解及C++模拟实现红黑树

一、红黑树的概念及性质 1.1 红黑树的概念 AVL树用平衡因子让树达到高度平衡 红黑树可以认为是AVL树的改良 通过给每个节点标记颜色让树接近平衡 以减少树在插入节点的旋转 在每个结点新增一个存储位表示结点颜色 可以是Red或Black 通过对任何一条从根到叶子的路径上 各个结点…

YOLOv8改进 | 二次创新篇 | 在Dyhead检测头的基础上替换DCNv3 (全网独家首发)

一、本文介绍 本文给大家带来的改进机制是在DynamicHead上替换DCNv3模块,其中DynamicHead的核心为DCNv2,但是今年新更新了DCNv3其作为v2的升级版效果肯定是更好的,所以我将其中的核心机制替换为DCNv3给Dyhead相当于做了一个升级,效果也比之前的普通版本要好,这个机制我认…

代码随想录 Leetcode24. 两两交换链表中的节点

题目&#xff1a; 代码(首刷看解析 2024年1月12日&#xff09;&#xff1a; class Solution { public:ListNode* swapPairs(ListNode* head) {if(headnullptr) return nullptr;ListNode* cur new ListNode(0,head);ListNode* dummy cur;while(cur->next ! nullptr &&…