首页 > 电脑 > 用贪心算法解决地图着色问题?并对海南岛地图着色。

用贪心算法解决地图着色问题?并对海南岛地图着色。

电脑 2022-10-23

c++,怎么解决地图着色问题?

地图着色可以使用回溯的方法进行解决。

递归描述如下:

在前面n-1个节点都合法的着色之后,开始对第n个节点进行着色。

这时候枚举可用的m个颜色,通过和与它相邻的节点的颜色,来判断这个颜色是否合法。

如果找到那么一种颜色使得第n个节点能够着色,那么说明m种颜色的方案是可行的。


//用于判断当前节点上涂上这个颜色可不可行,与其邻接节点的颜色做判断,这里用邻接表来存储图的信息
boolisOk(intstep)
{
vector::iteratoriter;
for(iter=input[step].begin();iter!=input[step].end();iter++)
{
if(Color[step]==Color[*iter])returnfalse;
}
returntrue;
}
//step表示0->n的节点,color_num是指给color_num的颜色的个数可用
//判断如果给color_num的颜色的个数是否可行,如果可行返回true,否则false
boolDFS(intstep,intcolor_num)
{
if(step>=n)returntrue;
else
{
inti;
for(i=1;i<=color_num;i++)
{
Color[step]=i;
if(isok(step))
{
if(DFS(step+1,color_num))
returntrue;
}
Color[step]=0;
}
}
returnfalse;
}

地图着色问题C/C++

从一个省开始,给它涂上任意一种颜色1,遍历它旁边的省份,涂上与已经涂色并于他相邻的省份不同的颜色就行了。 理论上4种颜色就够了.地图的四色问题嘛! 可能会有多组解。用递归(dfs)就可以输出所有解了。 地图着色算法C语言源代码 前面我写了一个地图着色(即四色原理)的C源代码。 写完以后想了一下,感觉还不完善,因为从实际操作的角度来考虑,四种可用的颜色放在旁边,不同的人可能会有不同的选择顺序,另外,不同的人可能会选择不同的城市作为着色的起点,而当时的程序没有考虑这个问题。于是,把程序修改为下面的样子,还请同行分析并指出代码中的不足之处: #i nclude #define N

图着色问题的路线着色问题

道路着色问题(Road Coloring Problem)是图论中最著名的猜想之一。通俗的说,这个猜想认为,可以绘制一张“万能地图”,指导人们到达某一目的地,不管他们原来在什么位置。这个猜想最近被以色列数学家艾夫拉汉· 特雷特曼(Avraham Trahtman)在2007年9月证明。
举个例子。在维基网给出的图例中,如果按图中所示方式将16条边着色,那么不管你从哪里出发,按照“蓝红红蓝红红蓝红红”的路线走9步,你最后一定达到黄色顶点。路线着色定理就是说在满足一定条件的有向图中,这样的着色方式一定存在。严格的数学描述如下。我们首先来定义同步着色。G是一个有限有向图并且G的每个顶点的出度都是k。G的一个同步着色满足以下两个条件:1)G的每个顶点有且只有一条出边被染成了1到k之间的某种颜色;2)G的每个顶点都对应一种走法,不管你从哪里出发,按该走法走,最后都结束在该顶点。有向图G存在同步着色的必要条件是G是强连通而且是非周期的。一个有向图是非周期的是指该图中包含的所有环的长度没有大于1的公约数。路线着色定理这两个条件(强连通和是非周期)也是充分的。也就是说,有向图G存在同步着色当且仅当G是强连通而且是非周期的。
特雷特曼在数学上的这一成果极为令人瞩目,英国《独立报》为此事专门发表了一篇题为“身无分文的移民成了数学超级明星”的文章,给予了高度的评价。
以色列人也为特雷特曼取得的成就感到无比的骄傲。特拉维夫电视台中断了正常的节目播放,以第一时间发布了这一重大消息,连中东其他国家的主流媒体也作了大篇幅的相关报道。
得知特雷特曼解决这一难题的消息后,多年从事路线着色问题研究的加拿大数学家乔尔·弗里德曼说,“路线着色问题的解决令数学共同体非常兴奋。”读过特雷特曼论文的中国数学家和语言学家周海中教授认为,特雷特曼的数学知识非常渊博,解题方法十分巧妙,这一谜题得到破解,无疑是数学史上的一个华彩乐章。 算法描述:color[n]存储n个顶点的着色方案,可以选择的颜色为1到m。
当t=1时,对当前第t个顶点开始着色:若t>n,则已求得一个解,输出着色方案即可。否则,依次对顶点t着色1-m, 若t与所有其它相邻顶点无颜色冲突,则继续为下一顶点着色;否则,回溯,测试下一颜色。 #includeintcolor[100];boolok(intk,intc[][100])//判断顶点k的着色是否发生冲突{inti,j;for(i=1;i=1){color[k]=color[k]+1;while(color[k]<=m)if(ok(k,c))break;elsecolor[k]=color[k]+1;//搜索下一个颜色if(color[k]<=m&&k==n){for(i=1;i<=n;i++)printf(%d,color[i]);printf(\n);}elseif(color[k]<=m&&k=3)种颜色着色,即k着色问题,被Karp证明是一个NP-complete问题。
但是,寄存器分配不仅仅是图着色的问题。当寄存器数目不足以分配某些变量时,就必须将这些变量溢出到内存中,该过程成为spill。最小化溢出代价的问题,也是一个NP-complete问题。如果简化该问题——假设所有溢出代价相等,那么最小化溢出代价的问题,等价于k着色问题,仍然是NP-complete问题。
此外,如果两个变量的生命期仅仅因为出现在同一个拷贝指令中而相邻,那么,通过将这两个变量分配到同一个寄存器,就可以消除该拷贝指令,成为coalescing。这个方向的努力在Chaitin的文章以后的1/4个世纪,成为推动寄存器分配的主要动力之一,涌现出了包括aggressive coalescing,conservative coalescing和optimistic coalescing。但是,将两个变量分配到同一个寄存器,等价于将这两个变量合并成同一个变量,生命期合并,因而会加剧相交图的聚簇现象,降低相交图的可着色性。Bouchez等人证明了目前的coalescing问题都是NP-complete的。
为了降低相交图的聚簇现象,提高相交图的可着色性,可以通过将变量拷贝给一个临时变量,并将以后对该变量的使用替换成对该临时变量的使用,从而将一个变量的生命期分解成两个变量的生命期,称为live range splitting。显然,这是一个与coalescing的作用相反的过程。Bouchez等人考虑了该方法的复杂度。
此外,寄存器分配还需要考虑寄存器别名(aliasing)和预着色(pre-coloring)的问题。寄存器别名是指,在某些体系结构中,一个寄存器的赋值可能会影响到另外一个寄存器。比如,在x86中,对AX寄存器的赋值,会影响AL和AH寄存器。预着色是指,某些变量必须被分配到特定的寄存器。比如,许多体系结构会采用特定寄存器来传递函数参数。
George和Appel发展了Chaitin的算法,更好地考虑了coalescing过程和赋值过程,以及各过程之间的迭代,在基于图着色的寄存器分配方法中具有广泛的影响。

求高手帮忙做一套算法分析的题目。做好之后再加100。

如何选择排序、矩阵相乘、树和图算法的时间复杂性计量单位? 排序:排序的循环次数(或递归次数)。 矩阵相乘:做实数乘法的次数。 树:搜索的次数。 图:同树。 算法有几种基本结构?各种结构的时间复杂度的计算规则? 3种 顺序结构:T(n)=O(c) 选择结构:T(n)=O(c) 循环结构:T(n)=O(n) 最坏情况下的时间复杂性和平均情况下的时间复杂性的定义? 在规模n的全部输入中,可以找寻执行一个算法所需的最大时间资源的量,这个量称为对规模n的输入,算法的最坏情况时间复杂性。 对规模都为n的一些有限输入集,执行算法所需的平均时间资源的量称为平均情况下的时间复杂性。 为什么选择时间复杂度的渐进性

急!利用5种不同的算法,为中国地图每个省着色,要求相邻的省份颜色不同,所用的颜色最少?!!

这是根据数学史上著名的四色问题,每幅地图都可以用四种颜色着色,使得有共同代表地形的不同! 颜色不代表什么,主要是为了区分方便,如果用同一种

标签:着色 信息技术 编程语言 编程 地图

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18