如何基于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 list语法学习(带例子)
Nov 01 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 Python
利用Python进行数据可视化常见的9种方法!超实用!
Jul 11 Python
Python wxPython库Core组件BoxSizer用法示例
Sep 03 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
pytorch标签转onehot形式实例
Jan 02 Python
keras中的History对象用法
Jun 19 Python
python给list排序的简单方法
Dec 10 Python
使用Python判断一个文件是否被占用的方法教程
Dec 16 Python
python之django路由和视图案例教程
Jul 26 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
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
python执行精确的小数计算方法
2019/01/21 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
python实现快递价格查询系统
2020/03/03 Python
Python如何测试stdout输出
2020/08/10 Python
HTML5之SVG 2D入门3—文本与图像及渲染文本介绍
2013/01/30 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
简单的JAVA编程面试题
2013/03/19 面试题
护理学毕业生自荐信
2013/10/02 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
入党自荐书范文
2014/03/09 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
实验室标语
2014/06/21 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
股权转让协议书
2014/12/07 职场文书
工会积极分子个人总结
2015/03/03 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
python munch库的使用解析
2021/05/25 Python
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android