LeetCode 3311. 构造符合图结构的二维矩阵

news2024/11/23 22:29:17

LeetCode 3311. 构造符合图结构的二维矩阵

给你一个二维整数数组 edges ,它表示一棵 n 个节点的 无向 图,其中 edges[i] = [ui, vi] 表示节点 ui 和 vi 之间有一条边。
请你构造一个二维矩阵,满足以下条件:
矩阵中每个格子 一一对应 图中 0 到 n - 1 的所有节点。
矩阵中两个格子相邻(横 的或者 竖 的)当且仅当 它们对应的节点在 edges 中有边连接。
题目保证 edges 可以构造一个满足上述条件的二维矩阵。
请你返回一个符合上述要求的二维整数数组,如果存在多种答案,返回任意一个。
示例 1:
输入:n = 4, edges = [[0,1],[0,2],[1,3],[2,3]]
输出:[[3,1],[2,0]]
解释:
在这里插入图片描述
示例 2:
输入:n = 5, edges = [[0,1],[1,3],[2,3],[2,4]]
输出:[[4,2,3,1,0]]
解释:
在这里插入图片描述
示例 3:
输入:n = 9, edges = [[0,1],[0,4],[0,5],[1,7],[2,3],[2,4],[2,5],[3,6],[4,6],[4,7],[6,8],[7,8]]
输出:[[8,6,3],[7,4,2],[1,0,5]]
解释:
在这里插入图片描述
提示:
2 <= n <= 5 * 104
1 <= edges.length <= 105
edges[i] = [ui, vi]
0 <= ui < vi < n
树中的边互不相同。
输入保证 edges 可以形成一个符合上述条件的二维矩阵。

建图、图的遍历

class Node:
    def __init__(self, val):
        self.val = val
        self.next = []


class Solution:
    def constructGridLayout(self, n: int, edges: List[List[int]]) -> List[List[int]]:
        node_mapping = {}
        for u, v in edges:
            if u not in node_mapping:
                node_mapping[u] = Node(u)
            if v not in node_mapping:
                node_mapping[v] = Node(v)
            u_node, v_node = node_mapping[u], node_mapping[v]
            u_node.next.append(v_node)
            v_node.next.append(u_node)

        # 先找出拥有最少连接点的结点,一个或两个
        m = 0
        for i in node_mapping:
            if len(node_mapping[m].next) > len(node_mapping[i].next):
                m = i

        # 1.有只有一个连接点的结点那么矩阵一定是一行
        visted = set()
        res = []
        if len(node_mapping[m].next) == 1:
            node = node_mapping[m]
            while node:
                res.append(node.val)
                visted.add(node.val)
                for _node in node.next:
                    if _node.val not in visted:
                        node = _node
                if node.val in visted:
                    node = None
            return [res]

        # 2.其他情况就是一个矩阵
        visted = set()
        res = []
        if len(node_mapping[m].next) == 2:
            # 先分析出矩阵第一行
            node = node_mapping[m]
            layer = []
            while node:
                layer.append(node.val)
                visted.add(node.val)
                for _node in node.next:
                    if _node.val not in visted:
                        # 第一行除第一个和最后一个点外都连接了3个点
                        if len(_node.next) == 3:
                            node = _node
                        # 最后一个点连接了2个点
                        elif len(_node.next) == 2:
                            layer.append(_node.val)
                            visted.add(_node.val)
                            node = None
                            break
            res.append(layer)

            # 从第二行开始每次遍历上一行的结果找到下一行就行
            flag = True
            while flag:
                layern = res[-1]
                new_layer = []
                for i in layern:
                    flag = False
                    node = node_mapping[i]
                    for _node in node.next:
                        if _node.val not in visted:
                            new_layer.append(_node.val)
                            visted.add(_node.val)
                            flag = True
                            break
                if new_layer:
                    res.append(new_layer)
            return res

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣之1336.每次访问的交易次数

题目&#xff1a; sql建表语句&#xff1a; Create table If Not Exists Visits (user_id int, visit_date date); Create table If Not Exists Transactions (user_id int, transaction_date date, amount int); Truncate table Visits; insert into Visits (user_id,…

如何让客户主动成为你的品牌大使

在销售领域&#xff0c;转介绍被公认为一把无坚不摧的利器&#xff0c;它不仅铸就了高成交率的辉煌&#xff0c;更以惊人的速度缩短了成交周期。一位精通转介绍艺术的销售员&#xff0c;其业绩自然熠熠生辉&#xff0c;工作之路亦显得游刃有余。 然而&#xff0c;面对这一宝藏…

Bianchi模型、python计算及ns3验证_关于2~10 STA验证的补充

首先就是预设修改, NS3中bitrate是OfdmRate54Mbps,STA数目我设置了2-10,ack长度是14bytes,数据长36,头36(trace中只有1536和14两个长度,也就是数据长度1500,头36,ack14),SIFS和SLOT是16us和9us(在phy的定义中,11a的时候,sifs是16,slot是9),difs是34us(在bia…

2024Java最新面试题总结(针对于一些小厂、中厂)

这是根据个人面试经历总结出来的一些经验希望可以帮助到有需要的人。 面试的时候&#xff0c;会先让你进行自我介绍&#xff0c;这个大家准备一两分钟的面试稿就可以。然后就是正式面试&#xff0c;面试官一般是两个人以上&#xff0c;开始&#xff0c;面试官会先提问一些基本…

【NLP自然语言处理】01-基础学习路径简介

目的&#xff1a;让大家能够在 AI-NLP 领域由基础到入门具体安排&#xff1a; NLP介绍 文本预处理RNN 及其变体&#xff08;涉及案例&#xff09;Transformer 原理详解迁移学习 和 Bert 模型详解 &#xff08;涉及案例&#xff09;特点&#xff1a; 原理 实践每个文章会有练习…

Nat. Commun.:飞秒激光书写受蚂蚁启发的可重构微型机器人集体

背景介绍生物在各种环境中的集体行为十分普遍&#xff0c;它们能够自发有序地完成单个个体难以完成的任务。目前&#xff0c;生物集体的形成主要分为两大类。第一类生物个体之间没有直接接触&#xff0c;如蜜蜂、鱼和鸟类&#xff0c;这导致这些集体不稳定&#xff0c;容易受到…

Ubuntu24 Firefox和Window Firefox同步问题

由于平常开发在Ubuntu系统&#xff0c;但是日常学习查资料又在Window系统&#xff0c;查资料保存网页到浏览器中时&#xff0c;经常遇到两个平台标签同步问题&#xff0c;希望可以选一个支持Ubuntu、Window的浏览器。 选用Google Chrome浏览器&#xff0c;确实挺好用&#xff…

微服务seata解析部署使用全流程

官网地址&#xff1a; Seata 是什么&#xff1f; | Apache Seata 1、Seata术语 用来管理分布式事务&#xff0c;由阿里巴巴出品。 【1、TC (Transaction Coordinator) - 事务协调者】 用来维护事务的&#xff0c;包括主事务和分支事务。 【2、TM (Transaction Manager) - …

TCP与UDP协议(三次握手四次挥手)

TCP与UDP 简介TCP和UDP一、TCP1.1 TCP的三次握手问题来了&#xff1a;为啥是三次握手而不是两次呢&#xff1f; 1.2建立连接后的通信过程&#xff08;丢包与乱序问题&#xff09;1.3四次挥手问题来了&#xff1a;为什么要四次挥手&#xff1f; 二、UDP 简介TCP和UDP TCP、UDP都…

机器学习笔记(持续更新)

重复值处理&#xff1a; 重复值处理代码&#xff1a; import pandas as pd data pd.DataFrame({学号: [1, 2, 3, 4, 5, 6, 7, 7, 8],身高: [172,162,175,170,168,160,164,164,160],体重: [70,62,75,68,67,58,64,64,53] }) data.drop_duplicates([学号], keep last, inplaceT…

SQL第13课挑战题

1. 使用inner join&#xff0c;以检索每个顾客的名称&#xff08;customers表中的cust_name&#xff09;和所有的订单号&#xff08;orders表中的order_num). 2. 修改第一题&#xff0c;仅列出所有顾客&#xff0c;及时他们没有下过订单。 3. 使用outer join联结products表和or…

【Easy RL】Easy RL蘑菇书全书学习笔记

【Easy RL】Easy RL蘑菇书全书学习笔记 第一章 强化学习基础1.1 强化学习概述监督学习强化学习与监督学习的不同之处二者的区别总结强化学习的特征强化学习的优越性预演&#xff08;rollout&#xff09;和 轨迹&#xff08;trajectory&#xff09;的概念端到端的概念深度强化学…

BurpSuite内置浏览器打不开(实用解决法/简便)

也不知道出现了什么问题就是莫名其妙的内置浏览器打不开&#xff0c;有时候不想配置代理很麻烦&#xff0c;这里实用的解决办法. 任务一 报错情况&#xff08;反正也看不懂&#xff09; 任务二 我们先去尝试打开这个运行模式&#xff0c;然后我们再去重试&#xff0c;如果还是打…

【重学 MySQL】五十九、二进制字符串类型与 JSON 类型

【重学 MySQL】五十九、二进制字符串类型与 JSON 类型 二进制字符串类型JSON类型 在MySQL数据库中&#xff0c;二进制字符串类型与JSON类型各自具有独特的特点和用途。 二进制字符串类型 二进制字符串类型在MySQL中主要用于存储二进制数据。这类数据类型包括BINARY、VARBINAR…

使用 ChatGPT Canvas 辅助 ABAP 开发

ChatGPT Canvas 是最近 OpenAI 推出的一个新功能,它不仅仅是一个简单的聊天对话式窗口。 Canvas 旨在扩展 ChatGPT 平台的功能,超越简单的问答交互。 Canvas 可以在单独的窗口中打开专用工作区,用户能够更直观、更高效地与 ChatGPT 在复杂的写作或者编码项目进行协作。 有…

Nginx08-反向代理

零、文章目录 Nginx08-反向代理 1、概述 关于正向代理和反向代理&#xff0c;我们在前面已经介绍过了&#xff0c;简而言之就是正向代理代理的对象是客户端&#xff0c;反向代理代理的是服务端&#xff0c;这是两者之间最大的区别。 Nginx即可以实现正向代理&#xff0c;也可…

【Unity】版本不一致且未升级资产,导致 Unity Sprite 2D 动画播放错误

自己的 Unity版本是 2022.3.45f1。目前折腾的这插件 2D Action RPG Engine: Mythril2D &#xff0c;推荐使用的 Unity 版本是 2021.3.18。 倒腾了这个 unity animation 动画半天&#xff0c;发现这个 animation sprite resolver 在导入动画帧的时候&#xff0c;一直都导入的是…

LeetCode 11 Container with Most Water 解题思路和python代码

题目&#xff1a; You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]). Find two lines that together with the x-axis form a container, such that the co…

【论文阅读】AUTOREGRESSIVE ACTION SEQUENCE LEARNING FOR ROBOTIC MANIPULATION

ABSTRACT 自回归模型在自然语言处理中取得了显著的成功。在这项工作中&#xff0c;我们为机器人操纵任务设计了一个简单而有效的自回归架构。我们提出了Chunking Causal Transformer&#xff08;cct&#xff09;&#xff0c;它扩展了因果关系transformers的下一个单标记预测 n…

Nginx07-静态资源访问

零、文章目录 Nginx07-静态资源访问 1、Nginx解决跨域问题 &#xff08;1&#xff09;同源策略 同源策略&#xff08;Same-Origin Policy&#xff09;是一个关键的网络安全概念&#xff0c;由Netscape公司在1995年引入&#xff0c;现在被所有现代浏览器所采用。它限制了从一…