如何基于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中pycurl库的用法实例
Sep 30 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
Python实现的单向循环链表功能示例
Nov 10 Python
Python 错误和异常代码详解
Jan 29 Python
基于python神经卷积网络的人脸识别
May 24 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
Python数据库小程序源代码
Sep 15 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
python爬虫容易学吗
Jun 02 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处理Json字符串解码返回NULL的解决方法
2014/09/01 PHP
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
Python如何对XML 解析
2020/06/28 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
宾馆仓管员岗位职责
2014/07/27 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
外国人来华邀请函
2015/01/31 职场文书
领导干部失职检讨书
2015/05/05 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript
Python办公自动化PPT批量转换操作
2021/09/15 Python
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript