# !/usr/bin/env python3
# -*- coding: utf-8 -*-
#Author:Nicolas TU
#Date:NOV.28,2019 20:57:07
from collections import Counter
from itertools import permutations,combinations,product#排列,组合,笛卡尔积
import time
'''
5座岛屿之间建造4座桥,使它们能够联通,请问有几种建桥方案?
哈密尔顿-凯莱定理
无向图连通性判断的五种方法(BFS、DFS、Union-find、Warshell、Tarjan)
Cayley定理的证明过程实际上是提供了构造过n个有标号顶点的树的方法。
(参考书:组合数学 卢开澄、卢华明等编著)
'''
time_start=time.time()#计算时间开始
cout=0;
G=[]
A= ['a1','a2','a3','a4','a5']#5个不同的组,字符表示;
B=list(combinations(A,2))#选择1个桥线路2个端点组合的集合
C=list(combinations(B,4))#选择4条桥线路组合的集合
print(B,"\n")
#print(len(C),"\n")#display C lenth
for i in range(len(C)):#
print(C[i],"\n")
print("========================华丽的分割线============================")
for i in C:#从集合中遍历,i的列表索引0,1,2,3;4桥。
H1=set(i[0])
H2=[set(item) for item in i[1:]]
flg = True
while flg:
'''
#取出第一座桥联通的两座岛屿,
反复遍历剩下所有的桥,如某桥有岛屿在联通
岛屿集合内,则将该桥删除并将联通的岛屿添
加该桥所连的另一座岛屿,直到所有桥梁均没
有连接联通岛屿集合内的岛;
'''
while flg:
flg=False
for item in H2:
if len(H1 | item) == (len(H1)+1):#&, |表示位运算
flg = True
H1= H1|item
if len(H1) ==5:
cout +=1
print ('第%d种排法:'%cout,'\n')
print (i,'\n')
print("========================华丽的分割线============================")
time_end=time.time()#计算时间结束
print ('5座岛屿之间建造4座桥,使它们能够联通,共有%d种建桥方案。'%cout,'\n')
print('-'*80)
print('python3.6程序运行',time_end-time_start,'秒。')
print('-'*80)
'''
========================华丽的分割线============================
第1种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a1', 'a4'), ('a1', 'a5'))
第2种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a1', 'a4'), ('a2', 'a5'))
第3种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a1', 'a4'), ('a3', 'a5'))
第4种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a1', 'a4'), ('a4', 'a5'))
第5种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a1', 'a5'), ('a2', 'a4'))
第6种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a1', 'a5'), ('a3', 'a4'))
第7种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a1', 'a5'), ('a4', 'a5'))
第8种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a2', 'a4'), ('a2', 'a5'))
第9种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a2', 'a4'), ('a3', 'a5'))
第10种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a2', 'a4'), ('a4', 'a5'))
第11种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a2', 'a5'), ('a3', 'a4'))
第12种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a2', 'a5'), ('a4', 'a5'))
第13种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a3', 'a4'), ('a3', 'a5'))
第14种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a3', 'a4'), ('a4', 'a5'))
第15种排法:
(('a1', 'a2'), ('a1', 'a3'), ('a3', 'a5'), ('a4', 'a5'))
第16种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a1', 'a5'), ('a2', 'a3'))
第17种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a1', 'a5'), ('a3', 'a4'))
第18种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a1', 'a5'), ('a3', 'a5'))
第19种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a2', 'a3'), ('a2', 'a5'))
第20种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a2', 'a3'), ('a3', 'a5'))
第21种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a2', 'a3'), ('a4', 'a5'))
第22种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a2', 'a5'), ('a3', 'a4'))
第23种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a2', 'a5'), ('a3', 'a5'))
第24种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a3', 'a4'), ('a3', 'a5'))
第25种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a3', 'a4'), ('a4', 'a5'))
第26种排法:
(('a1', 'a2'), ('a1', 'a4'), ('a3', 'a5'), ('a4', 'a5'))
第27种排法:
(('a1', 'a2'), ('a1', 'a5'), ('a2', 'a3'), ('a2', 'a4'))
第28种排法:
(('a1', 'a2'), ('a1', 'a5'), ('a2', 'a3'), ('a3', 'a4'))
第29种排法:
(('a1', 'a2'), ('a1', 'a5'), ('a2', 'a3'), ('a4', 'a5'))
第30种排法:
(('a1', 'a2'), ('a1', 'a5'), ('a2', 'a4'), ('a3', 'a4'))
第31种排法:
(('a1', 'a2'), ('a1', 'a5'), ('a2', 'a4'), ('a3', 'a5'))
第32种排法:
(('a1', 'a2'), ('a1', 'a5'), ('a3', 'a4'), ('a3', 'a5'))
第33种排法:
(('a1', 'a2'), ('a1', 'a5'), ('a3', 'a4'), ('a4', 'a5'))
第34种排法:
(('a1', 'a2'), ('a1', 'a5'), ('a3', 'a5'), ('a4', 'a5'))
第35种排法:
(('a1', 'a2'), ('a2', 'a3'), ('a2', 'a4'), ('a2', 'a5'))
第36种排法:
(('a1', 'a2'), ('a2', 'a3'), ('a2', 'a4'), ('a3', 'a5'))
第37种排法:
(('a1', 'a2'), ('a2', 'a3'), ('a2', 'a4'), ('a4', 'a5'))
第38种排法:
(('a1', 'a2'), ('a2', 'a3'), ('a2', 'a5'), ('a3', 'a4'))
第39种排法:
(('a1', 'a2'), ('a2', 'a3'), ('a2', 'a5'), ('a4', 'a5'))
第40种排法:
(('a1', 'a2'), ('a2', 'a3'), ('a3', 'a4'), ('a3', 'a5'))
第41种排法:
(('a1', 'a2'), ('a2', 'a3'), ('a3', 'a4'), ('a4', 'a5'))
第42种排法:
(('a1', 'a2'), ('a2', 'a3'), ('a3', 'a5'), ('a4', 'a5'))
第43种排法:
(('a1', 'a2'), ('a2', 'a4'), ('a2', 'a5'), ('a3', 'a4'))
第44种排法:
(('a1', 'a2'), ('a2', 'a4'), ('a2', 'a5'), ('a3', 'a5'))
第45种排法:
(('a1', 'a2'), ('a2', 'a4'), ('a3', 'a4'), ('a3', 'a5'))
第46种排法:
(('a1', 'a2'), ('a2', 'a4'), ('a3', 'a4'), ('a4', 'a5'))
第47种排法:
(('a1', 'a2'), ('a2', 'a4'), ('a3', 'a5'), ('a4', 'a5'))
第48种排法:
(('a1', 'a2'), ('a2', 'a5'), ('a3', 'a4'), ('a3', 'a5'))
第49种排法:
(('a1', 'a2'), ('a2', 'a5'), ('a3', 'a4'), ('a4', 'a5'))
第50种排法:
(('a1', 'a2'), ('a2', 'a5'), ('a3', 'a5'), ('a4', 'a5'))
第51种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a1', 'a5'), ('a2', 'a3'))
第52种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a1', 'a5'), ('a2', 'a4'))
第53种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a1', 'a5'), ('a2', 'a5'))
第54种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a2', 'a3'), ('a2', 'a5'))
第55种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a2', 'a3'), ('a3', 'a5'))
第56种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a2', 'a3'), ('a4', 'a5'))
第57种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a2', 'a4'), ('a2', 'a5'))
第58种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a2', 'a4'), ('a3', 'a5'))
第59种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a2', 'a4'), ('a4', 'a5'))
第60种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a2', 'a5'), ('a3', 'a5'))
第61种排法:
(('a1', 'a3'), ('a1', 'a4'), ('a2', 'a5'), ('a4', 'a5'))
第62种排法:
(('a1', 'a3'), ('a1', 'a5'), ('a2', 'a3'), ('a2', 'a4'))
第63种排法:
(('a1', 'a3'), ('a1', 'a5'), ('a2', 'a3'), ('a3', 'a4'))
第64种排法:
(('a1', 'a3'), ('a1', 'a5'), ('a2', 'a3'), ('a4', 'a5'))
第65种排法:
(('a1', 'a3'), ('a1', 'a5'), ('a2', 'a4'), ('a2', 'a5'))
第66种排法:
(('a1', 'a3'), ('a1', 'a5'), ('a2', 'a4'), ('a3', 'a4'))
第67种排法:
(('a1', 'a3'), ('a1', 'a5'), ('a2', 'a4'), ('a4', 'a5'))
第68种排法:
(('a1', 'a3'), ('a1', 'a5'), ('a2', 'a5'), ('a3', 'a4'))
第69种排法:
(('a1', 'a3'), ('a1', 'a5'), ('a2', 'a5'), ('a4', 'a5'))
第70种排法:
(('a1', 'a3'), ('a2', 'a3'), ('a2', 'a4'), ('a2', 'a5'))
第71种排法:
(('a1', 'a3'), ('a2', 'a3'), ('a2', 'a4'), ('a3', 'a5'))
第72种排法:
(('a1', 'a3'), ('a2', 'a3'), ('a2', 'a4'), ('a4', 'a5'))
第73种排法:
(('a1', 'a3'), ('a2', 'a3'), ('a2', 'a5'), ('a3', 'a4'))
第74种排法:
(('a1', 'a3'), ('a2', 'a3'), ('a2', 'a5'), ('a4', 'a5'))
第75种排法:
(('a1', 'a3'), ('a2', 'a3'), ('a3', 'a4'), ('a3', 'a5'))
第76种排法:
(('a1', 'a3'), ('a2', 'a3'), ('a3', 'a4'), ('a4', 'a5'))
第77种排法:
(('a1', 'a3'), ('a2', 'a3'), ('a3', 'a5'), ('a4', 'a5'))
第78种排法:
(('a1', 'a3'), ('a2', 'a4'), ('a2', 'a5'), ('a3', 'a4'))
第79种排法:
(('a1', 'a3'), ('a2', 'a4'), ('a2', 'a5'), ('a3', 'a5'))
第80种排法:
(('a1', 'a3'), ('a2', 'a4'), ('a3', 'a4'), ('a3', 'a5'))
第81种排法:
(('a1', 'a3'), ('a2', 'a4'), ('a3', 'a4'), ('a4', 'a5'))
第82种排法:
(('a1', 'a3'), ('a2', 'a4'), ('a3', 'a5'), ('a4', 'a5'))
第83种排法:
(('a1', 'a3'), ('a2', 'a5'), ('a3', 'a4'), ('a3', 'a5'))
第84种排法:
(('a1', 'a3'), ('a2', 'a5'), ('a3', 'a4'), ('a4', 'a5'))
第85种排法:
(('a1', 'a3'), ('a2', 'a5'), ('a3', 'a5'), ('a4', 'a5'))
第86种排法:
(('a1', 'a4'), ('a1', 'a5'), ('a2', 'a3'), ('a2', 'a4'))
第87种排法:
(('a1', 'a4'), ('a1', 'a5'), ('a2', 'a3'), ('a2', 'a5'))
第88种排法:
(('a1', 'a4'), ('a1', 'a5'), ('a2', 'a3'), ('a3', 'a4'))
第89种排法:
(('a1', 'a4'), ('a1', 'a5'), ('a2', 'a3'), ('a3', 'a5'))
第90种排法:
(('a1', 'a4'), ('a1', 'a5'), ('a2', 'a4'), ('a3', 'a4'))
第91种排法:
(('a1', 'a4'), ('a1', 'a5'), ('a2', 'a4'), ('a3', 'a5'))
第92种排法:
(('a1', 'a4'), ('a1', 'a5'), ('a2', 'a5'), ('a3', 'a4'))
第93种排法:
(('a1', 'a4'), ('a1', 'a5'), ('a2', 'a5'), ('a3', 'a5'))
第94种排法:
(('a1', 'a4'), ('a2', 'a3'), ('a2', 'a4'), ('a2', 'a5'))
第95种排法:
(('a1', 'a4'), ('a2', 'a3'), ('a2', 'a4'), ('a3', 'a5'))
第96种排法:
(('a1', 'a4'), ('a2', 'a3'), ('a2', 'a4'), ('a4', 'a5'))
第97种排法:
(('a1', 'a4'), ('a2', 'a3'), ('a2', 'a5'), ('a3', 'a4'))
第98种排法:
(('a1', 'a4'), ('a2', 'a3'), ('a2', 'a5'), ('a4', 'a5'))
第99种排法:
(('a1', 'a4'), ('a2', 'a3'), ('a3', 'a4'), ('a3', 'a5'))
第100种排法:
(('a1', 'a4'), ('a2', 'a3'), ('a3', 'a4'), ('a4', 'a5'))
第101种排法:
(('a1', 'a4'), ('a2', 'a3'), ('a3', 'a5'), ('a4', 'a5'))
第102种排法:
(('a1', 'a4'), ('a2', 'a4'), ('a2', 'a5'), ('a3', 'a4'))
第103种排法:
(('a1', 'a4'), ('a2', 'a4'), ('a2', 'a5'), ('a3', 'a5'))
第104种排法:
(('a1', 'a4'), ('a2', 'a4'), ('a3', 'a4'), ('a3', 'a5'))
第105种排法:
(('a1', 'a4'), ('a2', 'a4'), ('a3', 'a4'), ('a4', 'a5'))
第106种排法:
(('a1', 'a4'), ('a2', 'a4'), ('a3', 'a5'), ('a4', 'a5'))
第107种排法:
(('a1', 'a4'), ('a2', 'a5'), ('a3', 'a4'), ('a3', 'a5'))
第108种排法:
(('a1', 'a4'), ('a2', 'a5'), ('a3', 'a4'), ('a4', 'a5'))
第109种排法:
(('a1', 'a4'), ('a2', 'a5'), ('a3', 'a5'), ('a4', 'a5'))
第110种排法:
(('a1', 'a5'), ('a2', 'a3'), ('a2', 'a4'), ('a2', 'a5'))
第111种排法:
(('a1', 'a5'), ('a2', 'a3'), ('a2', 'a4'), ('a3', 'a5'))
第112种排法:
(('a1', 'a5'), ('a2', 'a3'), ('a2', 'a4'), ('a4', 'a5'))
第113种排法:
(('a1', 'a5'), ('a2', 'a3'), ('a2', 'a5'), ('a3', 'a4'))
第114种排法:
(('a1', 'a5'), ('a2', 'a3'), ('a2', 'a5'), ('a4', 'a5'))
第115种排法:
(('a1', 'a5'), ('a2', 'a3'), ('a3', 'a4'), ('a3', 'a5'))
第116种排法:
(('a1', 'a5'), ('a2', 'a3'), ('a3', 'a4'), ('a4', 'a5'))
第117种排法:
(('a1', 'a5'), ('a2', 'a3'), ('a3', 'a5'), ('a4', 'a5'))
第118种排法:
(('a1', 'a5'), ('a2', 'a4'), ('a2', 'a5'), ('a3', 'a4'))
第119种排法:
(('a1', 'a5'), ('a2', 'a4'), ('a2', 'a5'), ('a3', 'a5'))
第120种排法:
(('a1', 'a5'), ('a2', 'a4'), ('a3', 'a4'), ('a3', 'a5'))
第121种排法:
(('a1', 'a5'), ('a2', 'a4'), ('a3', 'a4'), ('a4', 'a5'))
第122种排法:
(('a1', 'a5'), ('a2', 'a4'), ('a3', 'a5'), ('a4', 'a5'))
第123种排法:
(('a1', 'a5'), ('a2', 'a5'), ('a3', 'a4'), ('a3', 'a5'))
第124种排法:
(('a1', 'a5'), ('a2', 'a5'), ('a3', 'a4'), ('a4', 'a5'))
第125种排法:
(('a1', 'a5'), ('a2', 'a5'), ('a3', 'a5'), ('a4', 'a5'))
========================华丽的分割线============================
5座岛屿之间建造4座桥,使它们能够联通,共有125种建桥方案。
--------------------------------------------------------------------------------
python3.6程序运行 6.30132532119751 秒。
--------------------------------------------------------------------------------
>>>
''' |