如何基于python实现不邻接植花


Posted in Python onMay 01, 2020

有 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-h

out:{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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现简易内存监控
Jun 21 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 Python
对python:循环定义多个变量的实例详解
Jan 20 Python
彻底理解Python中的yield关键字
Apr 01 Python
20行python代码实现人脸识别
May 05 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
jupyter notebook oepncv 显示一张图像的实现
Apr 24 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
Nov 28 Python
Pygame Time时间控制的具体使用详解
Nov 17 Python
Python接口测试结果集实现封装比较
May 01 #Python
解决python虚拟环境切换无效的问题
Apr 30 #Python
python爬虫实现POST request payload形式的请求
Apr 30 #Python
Pycharm IDE的安装和使用教程详解
Apr 30 #Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 #Python
Python爬虫:Request Payload和Form Data的简单区别说明
Apr 30 #Python
如何配置关联Python 解释器 Anaconda的教程(图解)
Apr 30 #Python
You might like
php中\r \r\n \t的区别示例介绍
2014/02/08 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
php链式操作的实现方式分析
2019/08/12 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
AngularJS转换响应内容
2016/01/27 Javascript
javascript求日期差的方法
2016/03/02 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
微信小程序 video组件详解
2016/10/25 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
对python 命令的-u参数详解
2018/12/03 Python
python ---lambda匿名函数介绍
2019/03/13 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
python关于倒排列的知识点总结
2020/10/13 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
请假条怎么写
2014/04/10 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
现场活动策划方案
2014/08/22 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
小学班级标语口号大全
2015/12/26 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server