如何基于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的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
Python实现Linux的find命令实例分享
Jun 04 Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
python3转换code128条形码的方法
Apr 17 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
Python实现http接口自动化测试的示例代码
Oct 09 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
PyQt 如何创建自定义QWidget
Mar 24 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&amp;mysql(一)
2006/10/09 PHP
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
php计算函数执行时间的方法
2015/03/20 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
python中去空格函数的用法
2014/08/21 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
python的slice notation的特殊用法详解
2019/12/27 Python
Python requests获取网页常用方法解析
2020/02/20 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
DNA测试:Orig3n
2019/03/01 全球购物
法学研究生自我鉴定范文
2013/12/04 职场文书
运动会通讯稿200字
2014/02/16 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
李强为自己工作观后感
2015/06/11 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
python微信智能AI机器人实现多种支付方式
2022/04/12 Python