如何基于python实现不邻接植花
作者:云上男孩 发布时间:2023-10-14 16:35:45
有 N 个花园,按从 1 到 N 标记。在每个花园中,你打算种下四种花之一。
paths[i] = [x, y] 描述了花园 x 到花园 y 的双向路径。
另外,没有花园有 3 条以上的路径可以进入或者离开。
你需要为每个花园选择一种花,使得通过路径相连的任何两个花园中的花的种类互不相同。
以数组形式返回选择的方案作为答案 answer,其中 answer[i] 为在第 (i+1) 个花园中种植的花的种类。花的种类用 1, 2, 3, 4 表示。保证存在答案。
示例 1:
输入:N = 3, paths = [[1,2],[2,3],[3,1]]
输出:[1,2,3]
示例 2:
输入:N = 4, paths = [[1,2],[3,4]]
输出:[1,2,1,2]
示例 3:
输入:N = 4, paths = [[1,2],[2,3],[3,4],[4,1],[1,3],[2,4]]
输出:[1,2,3,4]
提示:
1 <= N <= 10000
0 <= paths.size <= 20000
不存在花园有 4 条或者更多路径可以进入或离开。
保证存在答案。
知识准备
在python中可以使用列表作为队列,list用append添加元素
可以用字典来存储邻接节点nei = {}
在集合中使用for循环
{res[j] for j in G[i]}
集合的pop函数
flowers = {1,2,3,4} #集合直接相减即可
flowers.pop()
# 集合不能获取某个元素这样子的操作
print(flowers)out: {2,3,4}集合中的pop是从左边开始取
集合的相减
flowers = {1,2,3,4}
h = {0}
flowers-hout:{1,2,3,4}
我的题解
题解1
class Solution:
# 整体思路采用BFS方法,还需考虑不连通图的问题,然后着手结果唯一
def gardenNoAdj(self, N: int, paths: List[List[int]]) -> List[int]:
#构建一个answer数组
answer = [0 for _ in range(N)]
#构建所有节点
all_nodes = []
[all_nodes.append(i) for i in range(1,N+1)]
#构建visted列表
visted = dict.fromkeys(all_nodes, 0)
#初始化nei字典元素为空列表
nei = [[] for _ in range(N)]
# 构建无向邻接表,无邻居则不构建
for path in paths:
nei[path[0]-1].append(path[1])
nei[path[1]-1].append(path[0])
#遍历每一个点,每个点保证自己邻接点不是和自己相同就行
answer[0] = 1
for node in range(1,N+1): #遍历所有节点
visted[node] = 1
fix = set()
if(answer[node-1]==0): #如果为0,说明不是连通图
answer[node-1] = 1
flowers=[1,2,3,4]
nei[node-1] = sorted(nei[node-1]) #排序邻居节点
flowers.pop(answer[node-1]-1) #弹出父节点的flowers
for sinode in nei[node-1]: #遍历邻居
if(visted[sinode] == 0): #如果邻居未被访问过
answer[sinode-1] = flowers[0] #使用1,弹出1
flowers.pop(0)
else: #如果邻居被访问过
if(answer[sinode-1]==answer[node-1]):
answer[node-1] = flowers[0]
flowers.pop(0)
fix.add(answer[sinode-1])
if not fix:
continue
else:
flowers=[1,2,3,4]
for a_val in list(fix):
flowers.remove(a_val)
answer[node-1] = flowers[0]
return answer
简化方法:利用集合快速搞定
class Solution:
def gardenNoAdj(self, N: int, paths: List[List[int]]) -> List[int]:
#构建一个answer数组
answer = [0]*N
#初始化nei字典元素为空列表
nei = [[] for _ in range(N)]
# 构建无向邻接表,无邻居则不构建
for path in paths:
nei[path[0]-1].append(path[1])
nei[path[1]-1].append(path[0])
for node in range(1,N+1): #遍历所有节点
flowers={1,2,3,4}
#临时存储邻居含有的花类型
a = set()
for sinode in nei[node-1]: #遍历邻居
a.add(answer[sinode-1])
flowers = flowers - a
answer[node-1] = flowers.pop()
return answer
来源:https://www.cnblogs.com/cloudboy/p/12806509.html


猜你喜欢
- 一. 布隆过滤器简介布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别
- os.path模块是os模块根据系统类型从另一个模块导入的,并非由os模块实现1、os.path.abspath(相对路径)-----返回对
- 数字滤波分为 IIR 滤波,和FIR 滤波。FIR 滤波:import scipy.signal as signalimport numpy
- 实现效果图如下:当我点击 + 按钮时,会添加一行输入框组;当点击 - 按钮时,会删除这一行输入框组html代码如下:<div clas
- 经纬度坐标转换最常见办法就是调用第三方 API,例如百度、高德地图等服务平台,提供了相应的功能接口,它们的这类技术已经非常成熟啦,准确稳定,
- 前言这里存储过程和游标的定义和作用就不介绍了,网上挺多的,只通过简单的介绍,然后用个案例让大家快速了解。实例中会具体说明变量的定义,赋值,游
- 本篇博客参考Keqi Zhang的文章“A Progressive Morphological Filter for Removing No
- 1) 创建配置文件和帐户 (创建一个配置文件和配置数据库邮件向导,用以访问配置数据库邮件管理节点中的数据库邮件节点及其上下文菜单中使用的帐户
- 昨天晚上跑起来一个classification实验,今天发现训练loss在降,然而accuracy永远是0 。。。直觉告诉我evaluati
- 数据准备ON DUPLICATE KEY UPDATEinsert into test_table(id,username)VALUES(4
- 最近在改个程序用到了在js中设置css的float属性,以为和平常的写法一样,原来不是,只好去请教google,原来...首先大家先来看一下
- 本文实例讲述了Python实现的查询mysql数据库并通过邮件发送信息功能。分享给大家供大家参考,具体如下:这里使用Python查询mysq
- 准备1、下载所需安装包wget https://www.php.net/distributions/php-7.4.0.tar.gzwget
- 1.按列取、按索引/行取、按特定行列取import numpy as npfrom pandas import DataFrameimpor
- 散点图什么是散点图?散点图是指在数理统计回归分析中,数据点在直角坐标系平面上的分布图, 散点图表示因变量随自变量而变化的大致趋势,
- 引言使用python接口来运行caffe程序,主要的原因是python非常容易可视化。所以不推荐大家在命令行下面运行python程序。如果非
- 我的主机内存只有100G,现在要全表扫描一个200G大表,会不会把DB主机的内存用光?逻辑备份时,可不就是做整库扫描吗?若这样就会把内存吃光
- 1. 优化你的MySQL查询缓存在MySQL服务器上进行查询,可以启用高速查询缓存。让数据库引擎在后台悄悄的处理是提高性能的最有
- 本文实例讲述了django框架自定义用户表操作。分享给大家供大家参考,具体如下:django中已经给我生成默认的User表,其中的字段已经可
- 什么是探索性数据分析(EDA)?EDA 是数据分析下的一种现象,用于更好地理解数据方面,例如: – 数据的主要