如何基于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中的一些高级编程技巧
Apr 02 Python
Python实现把xml或xsl转换为html格式
Apr 08 Python
Python使用pymysql小技巧
Jun 04 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
使用python实现BLAST
Feb 12 Python
python和opencv实现抠图
Jul 18 Python
Python GUI编程完整示例
Apr 04 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
Nov 17 Python
Numpy ndarray 多维数组对象的使用
Feb 10 Python
python基础之模块的导入
Oct 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获取网站域名和地址的代码
2008/08/17 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
javascript闭包的理解
2015/04/01 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
微信小程序使用Promise简化回调
2018/02/06 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
Python内置的字符串处理函数整理
2013/01/29 Python
python实现博客文章爬虫示例
2014/02/26 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
老生常谈python之鸭子类和多态
2017/06/13 Python
python实现自动登录
2018/09/17 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
HTML5新增加的功能详解
2016/09/05 HTML / CSS
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
机电一体化职业规划书
2014/01/07 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
环境日宣传活动总结
2014/07/09 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
公司给客户的感谢信
2015/01/23 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技