# -*- coding: utf-8 -*-
#临接矩阵,例子中是一个3种颜色可涂抹的情况
node_matrix=[[False,True,False,False],[True,False,True,True],[False,True,False,True],
[False,True,True,False]]
#生成颜色填充向量
node_color=[0 for i in range(len(node_matrix))]
#当前着色节点为i，判断是否和一个之前填过颜色且与i临接的节点颜色一致
def iscollision(node_set,node_color,i,color):
	for j in range(i):#遍历已经着色的节点
		if node_set[i][j]==True and node_color[j]==color:#如果有一个j与i临接且着色一样，则不行！
			return True
	return False#没找到合适的j就没有颜色冲突
if __name__=="__main__":
	k=0
	#k控制回溯，当k遍历所有节点后，如果成功则为1个解
	while k>=0:
		while node_color[k]<=2:#可以加3次
			node_color[k]+=1#选择颜色，有1,2,3可选
			if not iscollision(node_matrix,node_color,k,node_color[k]):
				if k==len(node_matrix)-1:#是个解
					print(node_color)
				else:
					k+=1#继续对下一个节点进行上色操作
		node_color[k]=0#重新选择
		k-=1#回溯
