数据结构:五岔路口交通管理红绿灯设计
我们可以知道这是一个“图”的着色问题:设置交通灯的问题等价于对图的顶点染色问题,要求对图上的每一个顶点染一种颜色,并且要求有线相连的两个顶点不能用同一种颜色。
首先要考虑,为什么可行路线是13条?当然可以通过穷举得出,如果用公式:则是:
或者
注:一条路线必须包括一出一进两个方向
第一种答案的解法:
一、固定E为入口,则有C_4^1=4的可能;
二、除去E(因为E只有一个入向),剩下ABCD四个路口,然后因为C只有一个出方向,所以从剩下的ABD中选择一个入口,即C_3^1;
三、再从剩下的三个出口任选一个(包括C)组成出入路线:C_3^1∗C_3^1 = 9;
四、4+9=13,这便是最后答案。
第二种答案的解法:
一、考虑5个路口组成一出一进的路线,则有A_5^2=20种方案,
二、因为E只有入口,故去除以E为入口,ABD为出口的路线C_3^1=3种;
三、又因为C只有出口,所以除去以C为出口,ABD为入口的路线C_3^1=3种,
四、再去掉一种是C为入口,E为出口的路线,故20-3-3-1=13种。
接下来我们将得到的13个路线分别用不同的圆圈来表示,而交叉路线(通路之间的矛盾关系)用两个圆圈之间的连线来表示,则有这样的分析图:
我们以第一个路线AB为例进行分析,当路线AB是通路时,可以发现路线BC、BD、DA、EA均与AB有交叉,因此将AB的圆圈与其他四个圆圈用线连接:
同理,可以找出所有的连接线:
首先是AB、AC、AD的连接线:
然后是BA、BC、BD的连接线:
接下来是DA、DB、DC的连接线以及最后计算出每个顶点的度数(有多少条线,则度数即为所求):
最后我们可以得到关于这个问题的图模型的表示,我们将这个顶点的度数进行排序,依次对度数最大的顶点进行涂色,最后的涂色颜色数目,就是我们需要的设定的交通灯的颜色数目。
- 请问根据度数涂色,那么如果3度的灯亮了,B→C和D→B和A→D三条路是可通行的,这明显车会相撞的啊
- Re: 猫猫被注册了2017-08-28 20:56发表 [回复] [引用] [举报]
- 回复hilljiang:我只是标出了度数,然后根据顶点的度数进行排序,依次对度数最大的顶点进行涂色,最后的涂色颜色数目,就是我们需要的设定的交通灯的颜色数目,连线的不能涂同一个颜色,这样来保证不冲突