python海龟怎么填色,python小海龟填充颜色
一.导言
不知道本文使用的这种图像着色方案是否有前人提出过。如果没有人提出来,也是一个新的解决方案。虽然没有深入研究具体的性能对比,但是所需要的解决方案与网站中的最佳解决方案基本相同。
我们知道很多问题可以转化为图的着色问题来解决,所以文中的例子都是无向图。
第二,解决方案
不成熟的想法:
有很多配色方案可以让相邻点的颜色不一样,那么哪种配色方案使用的颜色最少呢?
首先,当我第一次看到这个问题的时候,我的第一想法是用最少的颜色一次给尽可能多的点上色。
_
_
_
_
_
上面是一个简单的示意图,但是我选择的步骤如下。
1.找出度数最大的顶点2、3、5(所有度数都是4)。
2,2上的着色C1,遍历相邻点
彩色C2在3和1
给4和3上的C2上色,与1碰撞,给C3上色。
5,5 C2着色,无碰撞。
给6号和4号C2上色,给5号碰撞上色,给C3上色。
7,4,C1着色,无碰撞。
从一次结束一种颜色开始:
我想实现之前的想法,但是在整理的过程中,我有了一个新的想法,结合之前运筹学课上学到的方法,可以更高效高质量的解决问题。
步骤如下。
第一步是在具有最大浓度的未着色点的顶点上着色Ci,并且生成同色点集作为不与该顶点相邻的未着色点集。
第二步:遍历相同颜色的点集,用Ci对点集中的点进行着色,从之前的每个点生成相同颜色的点集。这是一组不与上述Ci点相邻的未着色点,直到具有相同颜色的点组为空。
步骤3,更新未着色点集,i=i 1,返回步骤1
示例:下面是myciel3.col的数据图,需要至少出现几种颜色。
相邻矩阵是
每个顶点的度数是4,4,4,4,3,3,3,3,5,度数最大的顶点是第11个顶点。
1.您可以在V11上给C1上色,这样相同的颜色集就是{V1,V2,V3,V4,V5}。
2.您可以在V1上给C1上色,这样相同的颜色集就是{V3,V5}
3.V3上的彩色C1,并设置相同的颜色集{}
4.给V2上的C2着色可以得到相同的颜色集{V4,V7,V9,V10}
5.C2可以在V4上着色,因此相同的颜色集是{V7,V9}
6.在V7上着色C2,并设置同色组{V9}
7.在V9上给C2上色,收集相同的颜色集{}
8.在V5上给C3着色可以得到相同的颜色集{V6,V8,V10}
9.您可以在V6上为C3着色,以形成相同的颜色集{V10}
10.在V10上给C3上色,并设置相同的颜色集{}
11.彩色C4在V8上,并设置相同的颜色集{}
彩色图片:
使用了四种颜色,这与已知的最佳解决方案相同。
三。python代码的实现
1 defgetadjmatrix(path):2 edge=[]3 point num=04 with open)path, r )asfp:5 for line infp . read lines(:6 if line . starts with)p ):7 point num=int)line . split)233609 edd rtswith)e )and point num 0:11 edge)int)line . starts with))and point num 03
12 edge[int()[2])-1)[int(line . split)]-1]=1
13回到边缘,点数14
15
16defmain(:17edge,point num=getad jmatrix(r f:(Tim film(test . txt )18 print) 19 fori inedge 336666 end=
27 #要记录每个顶点的着色,初始化颜色列表。
28 color=[]29 for iinrange(point num):30 color . append(0)0)31 edge num=[sum(e)forein edge]32 forkin range
34 maxedgepoint=[ iforiinrange [点数] ifedgenum [ I ]==max [边数] andedgenum [ I ]!=0(35)最大横向长度
3 forpinmaxedgepoint 336037 ifpnotidisabled:38 #选择尚未着色且强度最高的点P开始着色。
39 color[p]=colorNum 1
4 disabled . append(p)41 edge num)=042 # temp用于查找该颜色可用于着色的下一个顶点。
3 temp=edge[p]44 for iinrange(point num):45 ifinodindisabled 336046 if temp[I]==03:47 #为不碰撞的顶点着色
48 color[i]=colorNum 1
49名残疾人。追加(i) 50edge num [i]=051 #)增加当前颜色的禁忌点。
5temp=[xy for (x,y in zip]edge[I],temp] 53 #需要新的颜色。
54 colorNum=colorNum 1
55
6 #每个顶点都已着色。
57如果0不在颜色中:58断开
5打印(彩色)60打印(彩色号码)61
62
63 main())
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。