如何基于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脚本实现xls(xlsx)转成csv
Apr 10 Python
python字符串中的单双引
Feb 16 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
django之自定义软删除Model的方法
Aug 14 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 Python
python实现简单反弹球游戏
Apr 12 Python
Python如何利用正则表达式爬取网页信息及图片
Apr 17 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中header和session_start前不能有输出原因分析
2013/01/11 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
值传递还是引用传递
2015/02/08 面试题
计算机专业毕业生求职信分享
2013/12/24 职场文书
小学开学寄语
2014/01/19 职场文书
入学生会自荐书范文
2014/02/05 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
2014两会学习心得:时代的发展
2014/03/17 职场文书
2014年变电站工作总结
2014/12/19 职场文书
写给医生的感谢信
2015/01/22 职场文书
数学复习课教学反思
2016/02/18 职场文书
nginx rewrite功能使用场景分析
2022/05/30 Servers