进行深度优先搜索,以找到具有动态武器和插槽编号的最佳伤害武器组合

时间:2018-06-20 11:09:55

标签: java depth-first-search

我正在为游戏设计模拟器。而且我想建立一个系统,以便从武器和插槽号是动态的武器组合中找到最佳伤害。

示例:

“ A”舰有4个插槽武器,玩家在机库中有6个武器。所以输出应该是这样的。 (组合武器1、2、3和4,带有4个插槽的情况

  

1234、1235、1236
1245、1246
1256

1345,   1346
1356

1456

2345,   2346
2356

2456

3456

这是我的代码:

public void searchMaxDamage(){
    int weaponLimit = 50;
    int slotLimit = 16;
    int counter = 0;
    int node = 0;
    boolean starter = true;

    ArrayList<Integer> stack = new ArrayList<Integer>();

    while(stack.size() != 0 || starter != false){

        if(starter){
            starter = false;
        }

        if(counter != weaponLimit){
            if(stack.size() < slotLimit-1){
                counter++;
                stack.add(new Integer(counter));
            }else{
                node = counter +1;

                System.out.println("Combination: ");

                if(node <= weaponLimit){

                    for(int i=node; i<=weaponLimit; i++){
                        System.out.print(i + ", ");
                    }

                    System.out.println();
                    stack.remove(stack.size()-1);
                }else{
                    System.out.println(", " + counter);

                    stack.remove(stack.size()-1);
                    counter = stack.get(stack.size()-1);
                    stack.remove(stack.size()-1);
                    node = counter +1;
                }
            } 
        }else{
            System.out.println("last: " + counter);

            stack.remove(stack.size()-1);
            counter = stack.get(stack.size()-1);
            stack.remove(stack.size()-1);
        }
    }

    System.out.println("Success");
    Toolkit.getDefaultToolkit().beep();
}

已经对其进行了测试,可以在机库中使用10-15武器的4、5、6号插槽正常工作。输出显示出我想要的那一行数字。但是,当我尝试使用16个插槽和25-30种武器时,代码会循环播放,而结果却不会给我5个小时(我正在等待5-6个小时的循环时间)。

0 个答案:

没有答案