【python-回溯法-图的m着色问题】

这篇具有很好参考价值的文章主要介绍了【python-回溯法-图的m着色问题】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

# -*- coding: UTF-8 -*- #
'''
@filename: graph_colouring_problem.py
@author:JIN
@time:2022-11-27
'''
"""
[问题描述]给定无向连通图G和m种不同的颜色,用这些颜色为图G的各顶点着色,每个顶点着一种颜色。
如果有一种着色法使G中每条边的两个顶点着不同颜色,则称这个图是m可着色的。
图的m着色问题是对于给定图G和m种颜色,找出所有不同的着色法。

输入描述:第1行有3个正整数n、k和m,表示给定的图G有n个顶点、k条边、m种颜色,
顶点的编号为1、2、…、n。在接下来的k行中每行有两个正整数u 、v,表示图G的一条边(u 、v)。

输出描述:程序运行结束时将计算出的不同着色方案数输出。如果不能着色,则程序输出-1。

输入样例

5 8 4

1 2

1 3

1 4

2 3

2 4

2 5

3 4

4 5

样例输出:

共48种着色方案

第一个着色方案:…

第二个着色方案:…

……
"""
import numpy as np

def ok(i):#遍历和顶点i相连接的所有顶点
    for j in range(1,n+1):
        #存在相邻顶点着色相同
        if (G[i][j] == 1 and flag[i]==flag[j]):
            return False
    #顶点i的所有相邻顶点着色都不同
    return True


def getcolor(i):
    global count
    # i>n说明找到了一个可行的涂色方案
    if (i > n):
        count += 1
        print(f'第{count}个着色方案:{flag[1:n + 1]}')
    else:  # //还没有到叶子节点,需要给当前节点可行的涂色
        for k in range(1,m+ 1):  # 子树是一个m叉树
            flag[i] = k #给第i个顶点着第k种颜色
            if (ok(i)):# 当顶点i着色为第k种颜色时候,所有相邻顶点着色都不同时候,可以进入下一个顶点着色
                getcolor(i+1)
            flag[i]=-1  #当顶点i当顶点i着色为第k种颜色时候,存在相邻顶点着色相同同时候,还原flag初始,并且尝试下一个k种颜色





if __name__ == '__main__':
    a = list(map(int, input("输入图G的顶点数、边数、颜色数").split()))
    n = a[0]  # 图G有n个顶点
    k = a[1]  # k条边
    m = a[2]  # m种颜色
    count = 0 #记录总着色方案
    flag = [-1 for i in range(n + 1)]  # flag代表顶点i的着色
    flag[0] = 0  # 0为虚点,
    G = [[0 for i in range(n + 1)] for j in range(n + 1)]
    for i in range(1, k + 1):
        print(f"第{i}条边是如下两个顶点构成", end=' ')
        b = list(map(int, input().split()))  # b[0]为行,b[1]为列
        G[b[0]][b[1]] = 1
        G[b[1]][b[0]] = 1
    print("输出G图为:", np.array(G))  # G图用矩阵表示 两顶点之间有连线的记作1,两顶点之间无连线记为0
    getcolor(1)
    if count > 0:
        print(f"共{count}种着色方案")
    else:
        print(-1)




【python-回溯法-图的m着色问题】

【python-回溯法-图的m着色问题】 

【python-回溯法-图的m着色问题】 

 文章来源地址https://www.toymoban.com/news/detail-512273.html

到了这里,关于【python-回溯法-图的m着色问题】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python中级篇1:n皇后问题(回溯算法)

    hello!大家好,我是浪矢秀一。最近经历了许多事情,终于是恢复1次更新了。那么今天呢,我们来学习中级篇,需要学过不少python知识的人来学习。好了,废话不多说,我们进入今天的课程!   在1个n*n的国际象棋棋盘上,放置n个皇后,要求:同1行、同1列、同1斜线上只能有1个皇后。   既然

    2024年02月03日
    浏览(24)
  • 解决使用git时遇到的“Filename too long“问题

    【问题】 :  git 命令操作提示Filename too long,一般是在windows下出现的问题。git可以创建4096长度的文件名,然而在windows最多是260。 【解决方案】 git bash命令窗口输入 –global或者system是该参数的使用范围,只想对本版本库设置该参数,上述命令中去掉–global或system。

    2024年02月08日
    浏览(33)
  • 解决Python中文乱码问题 # -*- coding:utf-8 -*-

    有个同事看到我写的py文件的最上方都有下面这个东东,问我这是干啥的,针对这个问题,我就简单唠叨几句~~~ 作用:解Python源码中存在乱码的问题 原因:Python默认是以ASCII作为编码方式,如果我们写的源码中包含了中文(或者其他非英语语言),python的翻译官——解释器就

    2023年04月08日
    浏览(29)
  • 解决VS Code/Code insiders右键python代码无法“转到定义”问题

    最近怀疑自己用了个假的VS Code, 同门的能丝滑跳转定义、跳转引用,自己的偏偏不行(合着这么爽的功能我从来没享受到(。﹏。*)),网上各种教程试了个遍都不行,最后自己摸索出了解决方案。记录在此备忘: 按以下顺序依次Check: 确保安装这些插件:Python、Pylance、Inte

    2024年02月08日
    浏览(32)
  • 基于数据结构知识解决地图着色问题

    摘  要 地图着色(map coloring)是一种组合构形,它是对于地图面集的一种 分划 ,分配地图的每一个面一种颜色,使得相邻的面(指有公共边界边)具有不同的颜色,称这样一种色的分配为这个地图的一个着色,或者说,将地图的面集分划为若干个子集,使得每个子集中的任何两面

    2024年02月03日
    浏览(30)
  • 区间图着色问题:贪心算法设计及实现

    在本文中,我们将探讨如何使用贪心算法解决一个特定的资源分配问题,即区间图着色问题。该问题可以描述为将一系列活动分配到最少数量的教室中,其中任意活动都可以在任意教室进行,但两个不兼容的活动不能安排在同一教室。我们将通过构造一个区间图来模拟这一问

    2024年04月27日
    浏览(28)
  • VS code中python相对包导入问题解决

    我的项目文件结构为 其中,module1.py就是实现了一个简单的加法: 而folder2里面的call.py尝试调用上面这个函数: 在包导入这方面,我一开始是尝试使用相对包导入,为: 但是出现了下面的错误: ImportError: attempted relative import with no known parent package 之后我尝试了配置launch.json文

    2024年04月28日
    浏览(26)
  • Python对excel单元格着色

    今天看了几篇关于Python对excel表格进行着色的文档,但是感觉都讲的不够清晰,顾写此篇供大家参考。 python 如何对excel中某一列某些值的单元格着色_python将特定列标黄_#Amark的博客-CSDN博客 Python中利用openpyxl对Excel的各种相关详细操作(二十一种常用操作<代码+示例>) (tao

    2024年02月12日
    浏览(27)
  • Java读写文件时的GBK和UTF8转换问题

    文件中的文本以UTF-8的编码方式存储,在Java程序中以GBK的编码方式从文件中读入,最后再将读入的内容转换为UTF-8编码,即 UTF-8 -- GBK -- UTF-8 。这种操作方式能正确读入文件中的内容吗? 因为本文主要讨论不同的编码之间的转换问题,所以有必要先介绍一下文中会用到的几种

    2024年02月07日
    浏览(34)
  • 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

    原文链接: 这篇文章有点长,内容有点多,如果时间急迫,可以直接翻页去末尾看结论。红色字体加粗的。 1、cpp或h文件从window上传到Ubuntu后会显示乱码, 原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK. 我们使用的Windows系统本地字符集编码为GBK。 2、Windows环境下,Qt C

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包