如何基于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 04 Python
在Django的模板中使用认证数据的方法
Jul 23 Python
python中string模块各属性以及函数的用法介绍
May 30 Python
Python用list或dict字段模式读取文件的方法
Jan 10 Python
Python多线程实现同步的四种方式
May 02 Python
Python中异常重试的解决方案详解
May 05 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
python脚本当作Linux中的服务启动实现方法
Jun 28 Python
python实现读取类别频数数据画水平条形图案例
Apr 24 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 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过滤html标记属性类用法实例
2014/09/23 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
javascript 浏览器检测代码精简版
2010/03/04 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
js中的this关键字详解
2013/09/25 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
移动前端图片压缩上传的实例
2017/12/06 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
高效使用Python字典的清单
2018/04/04 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
Python中的延迟绑定原理详解
2019/10/11 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
物流专业毕业生推荐信范文
2013/11/18 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
世博会口号
2014/06/20 职场文书
项目转让协议书
2014/10/27 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
我的收音机情缘
2022/04/05 无线电