• 数据结构:五岔路口交通管理红绿灯设计


    我们可以知道这是一个“图”的着色问题:设置交通灯的问题等价于对图的顶点染色问题,要求对图上的每一个顶点染一种颜色,并且要求有线相连的两个顶点不能用同一种颜色。
    首先要考虑,为什么可行路线是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的连接线以及最后计算出每个顶点的度数(有多少条线,则度数即为所求):
    最后我们可以得到关于这个问题的图模型的表示,我们将这个顶点的度数进行排序,依次对度数最大的顶点进行涂色,最后的涂色颜色数目,就是我们需要的设定的交通灯的颜色数目。


    1楼 hilljiang2017-07-02 18:18发表 [回复] [引用] [举报]

    请问根据度数涂色,那么如果3度的灯亮了,B→C和D→B和A→D三条路是可通行的,这明显车会相撞的啊
    Re: 猫猫被注册了2017-08-28 20:56发表 [回复] [引用] [举报]
    回复hilljiang:我只是标出了度数,然后根据顶点的度数进行排序,依次对度数最大的顶点进行涂色,最后的涂色颜色数目,就是我们需要的设定的交通灯的颜色数目,连线的不能涂同一个颜色,这样来保证不冲突
  • 相关阅读:
    android的NDK和java进行本地socket通信
    Android 8款开源游戏引擎
    Android使用AndEngine创建第一个程序
    J2ME项目移植到Android平台六大注意事项
    面面具到!android重力传感器
    android应用程序的混淆打包
    Android 5.0最应该实现的8个期望
    android service 的各种用法(IPC、AIDL)
    Android上怎样使用《贝赛尔曲线》
    Java序列化与反序列化学习(二):序列化接口说明
  • 原文地址:https://www.cnblogs.com/hjlweilong/p/8497152.html
Copyright © 2020-2023  润新知