如何基于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 相关文章推荐
videocapture库制作python视频高速传输程序
Dec 23 Python
Python中的Numeric包和Numarray包使用教程
Apr 13 Python
Python多进程同步简单实现代码
Apr 27 Python
Python实现字符串格式化的方法小结
Feb 20 Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 Python
Python切片操作实例分析
Mar 16 Python
记一次python 内存泄漏问题及解决过程
Nov 29 Python
实例介绍Python中整型
Feb 11 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
Jan 25 Python
Python基于Socket实现简单聊天室
Feb 17 Python
Pyspark读取parquet数据过程解析
Mar 27 Python
Python接口自动化之文件上传/下载接口详解
Apr 05 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
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
javascript事件问题
2009/09/05 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
关于img的href和src取变量及赋值的方法
2014/04/28 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
react-native之ART绘图方法详解
2017/08/08 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
js实现内置计时器
2019/12/16 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
跟老齐学Python之集合(set)
2014/09/24 Python
Python从零开始创建区块链
2018/03/06 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
什么是servlet
2012/05/08 面试题
青春奉献演讲稿
2014/05/08 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
委托证明模板
2014/09/16 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
店长岗位职责
2015/02/11 职场文书