import java.util.LinkedList;
import java.util.Scanner;
public class Colors {
/**
* @param args
*/
static LinkedList<node> nodelist = new LinkedList<node>();
static LinkedList<node> savelist = new LinkedList<node>();
static int state = 0;
public static node nodeadd(int n,int index,node last) {
node nn = new node();
nn.now = index;
for (int i = 1; i <= n; i++) {
nn.nodes [i] = last.nodes[i];
}
return nn;
}
public static void enqueue(int n ,int [][] num,int m) {
node n0 = new node();
n0.now = 0;
for(int i = 0; i <= n+1 ; i++){
n0.nodes[i] = 0;
}//构造0点
nodelist.add(n0);
int index = 1;
node nn1;
while (index <=n) {
node nnode = nodelist.pop();//获得第一个队列中第一个节点
if(nnode.nodes[index+1] !=0){
index++;
}//判断树的层数
for (int j = 1; j <= m; j++) {
nodeadd(n,index,nnode).nodes[index] = j;
if(isOk(n,index,num,nodeadd(n,index,nnode))){
savelist.add(nodeadd(n,index,nnode));
nodelist.add(nodeadd(n,index,nnode));
}//构造树并且剪枝
}
}
while(!savelist.isEmpty()) {
node nnn = savelist.pop();
if(nnn.now == 1){
state = 1;
for (int s = 0; s <=n; s++) {
System.out.print(nnn.nodes[s]);
}
System.out.print(" ");
}
}//获得结果
if(state == 0){
System.out.print("No Solution!");
}
}
private static boolean isOk(int n,int index,int [][] num,node nn) {
for (int i = 1; i <= index; i++) {
if (num[index][i] == 1 && nn.nodes[index] == nn.nodes[i] )
//当两个节点是连同并且颜色一样则不满足返回false
return false;
}
return true;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a,b;
Scanner sc =new Scanner(System.in);
int n = sc.nextInt();//节点数量
int k = sc.nextInt();//相邻边的数量
int m = sc.nextInt();//颜色的数量
int [][] num = new int [n+1][n+1];//构造邻接矩阵
for (int i = 0; i < k; i++) {
a=sc.nextInt();
b=sc.nextInt();
num[a][b]=num[b][a]=1;
}
enqueue(n,num,m);
}
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at Colors.nodeadd(Colors.java:15)
at Colors.enqueue(Colors.java:40)
at Colors.main(Colors.java:79)
想做图的着色分支限界法,但是不知道哪里一直死循环求帮帮忙看看