如何基于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 相关文章推荐
Python3基础之基本运算符概述
Aug 13 Python
Python制作数据导入导出工具
Jul 31 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
python多进程下实现日志记录按时间分割
Jul 22 Python
Django 用户认证组件使用详解
Jul 23 Python
python 中xpath爬虫实例详解
Aug 26 Python
python之列表推导式的用法
Nov 29 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
keras分类模型中的输入数据与标签的维度实例
Jul 03 Python
Python为何不支持switch语句原理详解
Oct 21 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 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 获取客户端的真实ip
2009/11/30 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
监控 url fragment变化的js代码
2010/04/19 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
Python判断有效的数独算法示例
2019/02/23 Python
python迭代器常见用法实例分析
2019/11/22 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
为什么说python适合写爬虫
2020/06/11 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
信息管理员岗位职责
2013/12/01 职场文书
特色冷饮店创业计划书
2014/01/28 职场文书
校园安全检查制度
2014/02/03 职场文书
公司委托书格式
2014/08/01 职场文书
贷款委托书怎么写
2014/08/02 职场文书
材料员岗位职责范本
2015/04/11 职场文书
2015年大学迎新晚会总结
2015/07/16 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS