如何基于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 代码效率的方法
Jul 03 Python
python结合API实现即时天气信息
Jan 19 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
让代码变得更易维护的7个Python库
Oct 09 Python
详解Python 中sys.stdin.readline()的用法
Sep 12 Python
wxPython多个窗口的基本结构
Nov 19 Python
Python如何重新加载模块
Jul 29 Python
使用Python pip怎么升级pip
Aug 11 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
python引入其他文件夹下的py文件具体方法
May 23 Python
Python内置数据类型中的集合详解
Mar 18 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 isset()与empty()的使用区别详解
2010/08/29 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
php代码书写习惯优化小结
2013/06/20 PHP
PHP中的替代语法简介
2014/08/22 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
python将文本转换成图片输出的方法
2015/04/28 Python
Python中pillow知识点学习
2018/04/30 Python
Python饼状图的绘制实例
2019/01/15 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
领导干部培训感言
2014/01/23 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
科技节口号
2014/06/19 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书