만큼의 노드가 한 level에 생긴다.
파란색, 노란색, 빨간색을 선택할 수 있다면
→ 각각 노드에 대해 파란색을 선택하는 경우, 빨간색, 노란색을 선택하는 경우
W[i][j] && (vcolor[i] == vcolor[j])
void m_coloring (index i)
{
int color;
if(promising(i))
if(i == n) cout<< vcolor[1] ~ vcolor[n];
else{
for(color = 1; color <= m; color++;){
vcolor[i+1] = color;
m_coloring(i+1);
}
}
bool promising(index i){
int j;
bool change;
change = true;
j = 1;
while(j<i && change)
{
if(W[i][j] && (vcolor[i] == vcolor[j]))
change = false;
j++;
}
return change;
}
~ 까지는 모두 에 연결되어있지만, ~ 각 노드들 서로는 연결 되지 않았다.
단, 와 사이에 간선이 하나 있다.
이때 이다.
상태 공간 트리 상의 노드의 총 수는
최악의 경우 노드를 총 몇 개 방문하는지 살펴보자
(v 생략)
첫번째로 1~n-2번째 노드들은 모두 유망하고, 모두 방문한다.
다음으로는 n-1번째 노드들은 모두 방문 하지만, 반만 유망하다.
⇒ n-2와 연결되어있으므로 같은 색은 사용하지 않아야 하기 때문에
마지막으로 n번째 노드이다. 이들은 유망했던 n-1번째 노드들의 자식들만 방문하므로
n level의 노드의 절반만 방문하게 된다.
하지만 답을 찾을 수 없으므로, 알고리즘은 답을 출력하지 않고 종료된다.
따라서 방문하는 노드의 수는 개 일 것이다.