import java.util.Arrays;
class Vertex implements Comparable<Vertex> {
int color;
int degree;
@Override
public int compareTo(Vertex o) {
return o.degree-this.degree;
}
}
public class Welch_Powell_Color {
final static int MAX=100;
int c[][];
int n;
// 排序前的副本
Vertex copys[];
// 按顶点度数从大到小排序
boolean cmp(Vertex a, Vertex b)
{
return a.degree > b.degree;
}
private void sortByDegree(Vertex[] vertex) {
Arrays.sort(vertex);
}
public void welsh_powell(Vertex[] vertex, int[][] edges) {
//按度数降序排列
sortByDegree(vertex);
int colored_cnt=0;
int ncolor=0;
while (colored_cnt < n) {
ncolor++;
for (int i = 1; i <= n; i++) {
// 如果没有着色
if (vertex[i].color == 0) {
boolean ok = true;
for (int j = 1; j <= n; j++) {
// 如果相邻顶点有相同颜色
if (edges[i][j]==1&&vertex[j].color==ncolor) {
ok = false;
break;
}
}
// 相邻顶点有相同颜色,直接跳过
if (!ok)
continue;
// 相邻顶点没有相同颜色,则对当前节点着色
vertex[i].color = ncolor;
colored_cnt++;
}
}
}
}
}
Welch_Powell图的顶点着色算法,O(n3)
最新推荐文章于 2024-03-25 10:22:36 发布