これは、行列の彩色数に対する力ずくの試みです。必要な正しい色数が得られるという意味では機能しているようですが、1,2,3,4 ではなく 1,2,3,6 が表示されます。何らかの理由で、マトリックスがより少ない色で成功する可能性がある場合でも、それでも失敗し、最大数に達し続けます。失敗し続けるのには何か理由があるのですか?
「n」は色の最大数です。"v" は頂点、"m" は現在使用されている色の数です。
疑似コード: http://i42.tinypic.com/deoc2u.jpg
static int color(){
int i;
for(i = 1; i <= n; i++)
{
if(color(0,i)){
return i;}
}
return i;
}
static boolean color(int v, int m) {
if(v > n-1)
return true;
else
{
for(int i = 1; i <= m; i++)
{
boolean match = false;
q[v] = i;
for(int j = 0; j < n; j++)
{
if(input[v][j] == 1)
{
if(q[v] == j+1)
match = true;
}
}
if(match == false)
{
if(color(v+1,m))
return true;
}
}
q[v] = 0;
return false;
}
}
出力例:
ファイル名: file1
入力
6
0 1 1 0 1 1
1 0 1 1 1 1
1 0 1 0 1
0 1 1 0 1 1
1 0 1 0 1
1 1 1 1 1 0
1 失敗
2 失敗
3 失敗
4 失敗
5 失敗
色: 1 2 3 1 3 6