如何基于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的Tornado框架中内置的模板引擎
Jul 11 Python
python算法表示概念扫盲教程
Apr 13 Python
使用Python读取大文件的方法
Feb 11 Python
Python反转序列的方法实例分析
Mar 21 Python
python3爬虫之设计签名小程序
Jun 19 Python
Python实现随机创建电话号码的方法示例
Dec 07 Python
Python饼状图的绘制实例
Jan 15 Python
Python pandas库中的isnull()详解
Dec 26 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
Jun 24 Python
Python自动创建Excel并获取内容
Sep 16 Python
jupyter notebook快速入门及使用详解
Nov 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
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
php数组的概述及分类与声明代码演示
2013/02/26 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
js下用层来实现select的title提示属性
2010/02/23 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
代码分析Python地图坐标转换
2018/02/08 Python
python实现超市扫码仪计费
2018/05/30 Python
python Canny边缘检测算法的实现
2020/04/24 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
python 实现客户端与服务端的通信
2020/12/23 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
中秋节礼品促销方案
2014/02/02 职场文书
银行优秀员工事迹
2014/02/06 职场文书
致垒球运动员加油稿
2014/02/16 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
卫生主题班会
2015/08/14 职场文书
Python if else条件语句形式详解
2022/03/24 Python