如何基于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面试题
Jul 24 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
详解python运行三种方式
May 13 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
python 多进程队列数据处理详解
Dec 23 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
Python生成器generator原理及用法解析
Jul 20 Python
python实现图片转字符画的完整代码
Feb 21 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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
php 判断字符串中是否包含html标签
2014/02/17 PHP
PHP函数积累总结
2019/03/19 PHP
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
jquery显示和隐藏div特效实例
2013/02/27 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
angular组件间传值测试的方法详解
2020/05/07 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
Python selenium 三种等待方式解读
2016/09/15 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
自荐信格式简述
2014/01/25 职场文书
公司授权委托书
2014/04/04 职场文书
实习单位评语
2014/04/26 职场文书
小学节能减排倡议书
2014/05/15 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
单位计划生育责任书
2015/05/09 职场文书