为我的 AI 类编写一段代码,旨在列出给定三个水壶问题的所有可能状态(您可以装满任何水壶,或将尽可能多的水倒入另一个水壶,或清空任何水壶,如您可以按任意顺序多次)从空罐子开始。由于某种原因,在记录了 88 个看似不同的状态后,第 89 个与第一个相同,我最终用完了空间,因为它循环了。我认为这与我如何检查状态是否不同有关,但无法弄清楚。任何帮助将不胜感激。import java.util.ArrayList; import java.util.List;public class AI { private static final int[] start=new int[]{0,0,0}; private static int[] jugs; public static void main(String[] args){ jugs=new int[]{Integer.parseInt(args[0]), Integer.parseInt(args[1]),Integer.parseInt(args[2])}; String out=""; out=out.concat("{"); for (int[] state:addStates(start,new ArrayList<>())) { out=out.concat("{"+state[0]+","+state[1]+","+state[2]+"}"); } out=out.substring(0,out.length()-2).concat("}"); System.out.println(out);}private static List<int[]> addStates(int[] start, List<int[]> states) { states.add(start); int[][] newStates={ fillA(start), fillB(start), fillC(start), emptyA(start), emptyB(start), emptyC(start), pour(start,0,1), pour(start,0,2), pour(start,1,0), pour(start,1,2), pour(start,2,0), pour(start,2,1) }; for (int[] child:newStates) { if (!has(states,child)) { states.addAll(addStates(child,states)); } } System.out.println("close"); return states;}private static boolean has(List<int[]> list, int[] e) { //finds out if list contains something with the same values as e for (int[] el:list) { boolean is=true; for(int i=0;i<e.length;i++){ if (el[i]!=e[i]){ is=false; } } if(is){ return true; } } return false;}
1 回答
aluckdog
TA贡献1847条经验 获得超7个赞
问题是我同时使用了states.add(start)
and states.addAll(addStates(child,states))
,这意味着我多次添加了每个元素。修复此问题后,代码运行良好。
添加回答
举报
0/150
提交
取消