1. 问题描述
足球联盟内有6支球队:秃鹫,雄狮,飞鹰,海狸,猛虎,山猫。秃鹫已经对阵雄狮和飞鹰;雄狮也已经对阵海狸和山猫。每个队每周只赛一场。做一个赛程安排,使每个队与其他所有队互赛一场,且整个赛程最短。建立一个图模型以便使用图着色方法求解问题。
虽然只有6支队伍,但在考虑主客场的情况下,点数很多,加之回溯法本身指数级的时间复杂度,导致有些情况求解不出来。
2. 思路分析
用A~E这6个字母依次代表题目中的球队。在考虑主客场的情况下,“互赛”意味着比赛双方是有次序的,如AB和BA不同,一场比赛为图模型的一个点。则图模型的点集为:"AD", "AE", "AF", "BA", "BC", "BE", "CA", "CB", "CD", "CE", "CF","DA", "DB", "DC", "DE", "DF", "EA", "EB", "EC", "ED", "EF", "FA", "FB", "FC", "FD", "FE"。且已按字典序排好。一共是26种(已经除去比赛过的队伍)。
下面确定图模型的边集。首先这是无向图。图模型的每条边连接两个点(两场比赛),它表明这两场比赛不能在一周内同时进行,比如"AD"和"AE"应该连接,"AD"和"DA"应该连接,"AD"和"BC"不能连接,等等。这样建立好边集。采用邻接表存储,可避免对不相邻点的重复访问,因为不关心不相邻点的颜色。
问题的求解就是对图的点着色,相邻点不能用同一颜色。颜色数较多时,如果本身能够完成着色,找到一个解即可,在点规模只有26的情况下,常数时间规模内即可完成判定。颜色数较少时,如果本身能够完成着色,则需遍历整个解空间,达到指数级时间复杂度,只能判定颜色数较少的情况,颜色数较大又无法着色导致耗时极长。