voidgraphColor(int step){if step == n then //存在可行的完整着色方案,打印方案for i ← 0 to n-1
cout << color[i]<<" ";
end for i
cout << endl;
counts++;elsefor k ← 1 to m
color[step]= k;//step顶点尝试各种颜色着色if(check(step)) then//若改颜色着色可行,进行下一个顶点的着色graphColor(step+1);
end if//不可行,回溯
color[step]=0;
end for k
end if}
问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。解析利用回溯法。涂的时候从颜色1开始到m,每当涂上一个色,要判断第c个点是否可以涂这个色,不可以的话就不再往下涂了,改试另一个颜色,可以的话就继续。当c>n的时候即前n个点都涂完了,然后输出结果并cout++计数。设计void graphColor(int step) { if step == n t.