shensheneran 2020-10-13 20:59 采纳率: 0%
浏览 80

死循环了但是找不到哪里出问题,求大佬帮忙解决

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)

想做图的着色分支限界法,但是不知道哪里一直死循环求帮帮忙看看

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-10-14 00:04
    关注

    enqueue
    这个函数下断点调试下,看看有什么问题,提示信息是爆内存了。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题