牛客NC218 检测循环依赖【中等 图 Java,Go,PHP】

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/8dc02ad98553432a90affc3a0484910b

思路

图的基本知识要理解,一般用Map来表示
图解决拓扑排序,依赖之类的问题
感觉课程数在这道题里面可以不用,因为没有规定所有课程都得有先修,
所有先修约束里面可能就     没有包含所有课程

参考答案Java

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param prerequisites int整型二维数组* @param n int整型* @return int整型一维数组*/public int[] findOrder (int[][] prerequisites, int n) {//map表示图Map<Integer, Node> g = new HashMap<>();for (int[] item : prerequisites) {int fv = item[1];int tv = item[0];if (!g.containsKey(fv))g.put(fv, new Node(fv));if (!g.containsKey(tv))g.put(tv, new Node(tv));Node fn = g.get(fv);Node tn = g.get(tv);fn.nexts.add(tn);tn.in++;}Queue<Node> q0 = new LinkedList<>();for (Node cur : g.values()) {if (cur.in == 0) {q0.add(cur);}}List<Integer> list = new ArrayList<>();int cnt = 0;while (!q0.isEmpty()) {int size = q0.size();for (int i = 0; i < size ; i++) {Node poll = q0.poll();cnt++;if (list.contains(poll.data)) return new int[0];list.add(poll.data);for (Node next : poll.nexts) {if (--next.in == 0) {q0.add(next);}}}}int[] ans = new int[list.size()];for (int i = 0; i < list.size() ; i++) {ans[i] = list.get(i);}return ans;}static class Node {int data;int in = 0;List<Node> nexts = new ArrayList<>();public Node(int d) {data = d;}}
}

参考答案Go

package main/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param prerequisites int整型二维数组* @param n int整型* @return int整型一维数组*/
func findOrder(prerequisites [][]int, n int) []int {//map 模拟图g := map[int]*GNode{}for _, v := range prerequisites {fv := v[1]tv := v[0]_, okf := g[fv]if !okf {g[fv] = CreateGnode(fv)}_, okt := g[tv]if !okt {g[tv] = CreateGnode(tv)}fn := g[fv]tn := g[tv]fn.nexts = append(fn.nexts, tn)tn.in++}//Go中用切片模拟Java中的队列Queueq0 := []*GNode{} //每次进入队列的都是入度为0的for _, cur := range g {if cur.in == 0 {q0 = append(q0, cur)}}set := map[int]bool{}ans := []int{}for len(q0) > 0 {size := len(q0)q0bak := []*GNode{}for i := 0; i < size; i++ {poll := q0[i]_, exist := set[poll.data]if exist {return []int{}}set[poll.data] = trueans = append(ans, poll.data)for _, next := range poll.nexts {next.in--if next.in == 0 {q0bak = append(q0bak, next)}}}q0 = q0bak}return ans
}type GNode struct { //图节点的定义data  intin    int      //入度nexts []*GNode // 图的邻居有哪些
}func CreateGnode(d int) *GNode { //新建节点return &GNode{d, 0, []*GNode{}}
}

参考答案PHP

<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param prerequisites int整型二维数组 * @param n int整型 * @return int整型一维数组*/
function findOrder( $prerequisites ,  $n )
{//图$map =array();foreach ($prerequisites as $v){$fv = $v[1];$tv = $v[0];if(!isset($map[$fv]))$map[$fv] = new Node($fv);if(!isset($map[$tv]))$map[$tv] = new Node($tv);$fv = $map[$fv];$tn = $map[$tv];array_push($fv->nexts,$tn);$tn->in++;}//队列,PHP中的数组也是队列$q0 = array();foreach ($map as $cur){if($cur->in ==0)array_push($q0,$cur);}$ans = array();while (count($q0) >0){$size = count($q0);for($i=0;$i<$size;$i++){$poll = array_shift($q0);if(in_array($poll->data,$ans)) return array();array_push($ans,$poll->data);foreach ($poll->nexts as $next){$next->in--;if($next->in ==0){array_push($q0,$next);}}}}return $ans;
}class Node{ //图public $data;public $in;public $nexts;public function Node($d){$this->data = $d;$this->in =0;$this->nexts =array();}
}

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

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

相关文章

Pycharm中安装插件

推荐安装两款插件 1.汉化软件 2.翻译软件 安装插件步骤&#xff1a;

YOLOV5 部署:TensorRT的安装和使用

1、介绍 TensorRT 可以加速神经网络的推理时间,常常在工业生产中使用 因为TensorRT需要使用到cuda和cudnn加速,所以需要安装这两个,安装的具体步骤参考前文: YOLOV5 部署:cuda和cuDNN安装-CSDN博客 2、TensorRT 下载 TensorRT下载地址:NVIDIA TensorRT Download | NV…

基于大数据的空气质量预测和可视化分析

城市空气质量数据采集系统设计与实现 &#x1f3d9;️ 研究背景 &#x1f32c;️ 城市化与环境挑战&#xff1a;随着城市化进程的加快&#xff0c;环境污染问题&#xff0c;尤其是空气质量问题&#xff0c;已成为公众关注的焦点。数据监测的重要性&#xff1a;城市空气质量数…

初识 Redis 浅谈分布式

目 录 一.认识 Redis二.浅谈分布式单机架构分布式是什么数据库分离和负载均衡理解负载均衡数据库读写分离引入缓存数据库分库分表引入微服务 三.概念补充四.分布式小结 一.认识 Redis 在 Redis 官网我们可以看到介绍 翻译过来就是&#xff1a;数以百万计的开发人员用作缓存、…

Apache Spark

一、Apache Spark 1、Spark简介 Apache Spark是用于大规模数据 (large-scala data) 处理的统一 (unified) 分析引擎。 Spark官网 Spark最早源于一篇论文Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing,该论文是由加州大学柏…

从零开始学HCIA之网络基础知识02

1、TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;参考模型&#xff0c;它是当下实际的业界标准。 2、TCP/IP这个名字来自该协议簇中两个非常重要的协议&#xff0c;一个是IP&#xff08;Internet Protocol&#xff09;&#xff0c;另一个是T…

Rust 程序设计语言学习——结构体

结构体和元组类似&#xff0c;它们都包含多个相关的值。和元组一样&#xff0c;结构体的每一部分可以是不同类型。但不同于元组&#xff0c;结构体需要命名各部分数据以便能清楚的表明其值的意义。由于有了这些名字&#xff0c;结构体比元组更灵活&#xff1a;不需要依赖顺序来…

react拖拽react-beautiful-dnd,一维数组,二维数组

写在前边&#xff0c;二维数组可以拖拽&#xff0c;但是不可以编辑拖拽&#xff0c;如果想要实现编辑拖拽&#xff0c;还是需要转换成一维数组。原因是因为插件的官方规定&#xff0c;在拖拽过程中不可以编辑Droppable层的Props。 相关地址&#xff1a; 中文文档地址 react-be…

surface go 2简单的配置

1.基本的配置信息 cpu 4425Y 感觉还是比较的弱 但是处理基本的网页浏览或收发电子邮件还是很不错的 2. C:\Users\win>systeminfo 主机名: DESKTOP-F5TT6HJ OS 名称: Microsoft Windows 10 专业版 OS 版本: 10.0.19045 暂缺 Build 19045 …

WordCount案例实操

文章目录 需求分析代码环境准备编写Mapper类编写Reducer类编写Driver驱动类本地运行注意事项运行结果 提交到集群测试 需求分析 在给定的文本文件中统计输出每一个单词出现的总次数 期望输出数据&#xff1a; atxiaoyu 2 banzhang 1 cls 2 hadoop 1 jiao 1 ss 2 xue 1 实现过…

智慧物联-能源分析平台

物联能源分析平台是为了满足企业对能源管理和节能减排的需求而开发的一套在线平台。随着能源问题日益凸显&#xff0c;企业对能源的使用和管理面临着越来越大的挑战。因此&#xff0c;开发一个能够帮助企业实时监测、分析和优化能源消耗的平台变得尤为重要。 随着工业化和城市…

nodejs+vue高校奖助学金系统python-flask-django-php

高校奖助学金系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&#xff0c;…

基于spring boot的个人博客系统的设计与实现(带源码)

随着国内市场经济这几十年来的蓬勃发展&#xff0c;突然遇到了从国外传入国内的互联网技术&#xff0c;互联网产业从开始的群众不信任&#xff0c;到现在的离不开&#xff0c;中间经历了很多挫折。本次开发的个人博客系统&#xff0c;有管理员&#xff0c;用户&#xff0c;博主…

人工智能之Tensorflow批标准化

批标准化&#xff08;Batch Normalization,BN&#xff09;是为了克服神经网络层数加深导致难以训练而诞生的。 随着神经网络的深度加深&#xff0c;训练会越来越困难&#xff0c;收敛速度会很慢&#xff0c;常常会导致梯度消失问题。梯度消失问题是在神经网络中&#xff0c;当前…

STM32学习笔记(5_2)- EXTI外部中断代码

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期介…

STM32学习笔记(6_2)- TIM定时器中断和定时器内外时钟源选择代码

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 现在开…

网络核心知识点 - 网络通信技术 XHR(XMLHttpRequest) 和 Fetch

一、关于 AJAX&#xff08;一种思想和方法&#xff09; 浏览器本身就具备网络通信的能力&#xff0c;但在早期&#xff0c;浏览器并没有把这个能力开放给JS。最早是微软在IE浏览器中把这一能力向JS开放&#xff0c;让JS可以在代码中实现发送请求&#xff0c;并不会刷新页面。Aj…

道路与航线

一道类似缩点的好题&#xff0c;先按道路缩点 然后将缩点以后的图按照航线做DAG 在DAG上先跑topsort 在每一个团内部跑dijkstra&#xff0c;同时更新top点 很有意思的一道题目 #include<bits/stdc.h> using namespace std; using ll long long; const int N 3e510; co…

python—接口编写部分

最近准备整理一下之前学过的前端小程序知识笔记&#xff0c;形成合集。顺便准备学一学接口部分&#xff0c;希望自己能成为一个全栈嘿嘿。建议关注收藏&#xff0c;持续更新技术文档。 目录 前端知识技能树http请求浏览器缓存 后端知识技能树python_api&#xff1a;flaskflask…

【Node.js】zlib

gzip 和 deflate 的基本使用 const zlib require("zlib"); const fs require(fs)// 压缩 1. createGzip .gz 2. createDeflate .deflate // const readStream fs.createReadStream(index.txt) // const writeStream fs.createWriteStream(index.txt.gz) // rea…