如何基于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中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
May 03 Python
Python3 socket同步通信简单示例
Jun 07 Python
利用python求相邻数的方法示例
Aug 18 Python
使用requests库制作Python爬虫
Mar 25 Python
python实现黑客字幕雨效果
Jun 21 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
Django中自定义admin Xadmin的实现代码
Aug 09 Python
基于Python获取城市近7天天气预报
Nov 26 Python
jupyter notebook实现显示行号
Apr 13 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/05/24 PHP
jQuery中调用WebService方法小结
2011/03/28 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
Python多线程实例教程
2014/09/06 Python
跟老齐学Python之再深点,更懂list
2014/09/20 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
python线程join方法原理解析
2020/02/11 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
银行会计财务工作个人的自我评价
2013/10/29 职场文书
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
协议书怎么写
2014/04/21 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
护士求职自荐信范文
2015/03/04 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书