1、G # G # # # # # # # # # # # G # # # # # 两个球相邻是不能动的。中间一定要有至少一个的空格。当碰撞过后,只有一个球在棋盘上为有解。否则无解。每次选择任意一个球开始运动,碰撞完成后,可以选择任意剩下小球开始运动。请写出一个程序,任意初始化棋盘上的小球,然后判断是否有解,有解打印出球移动步骤,否则输入无解。提供一些逻辑,大家讨论。感觉是推箱子+动量守恒,每当发生箱子被推出界外,则必须再手动给予一个动量。还是递归来解(可能存在多个解) 手动给予任意球任意方向(4个方向)一动量,满足的递归条件则继续迭代,否则当前无解返回。再循环下一个球,只有到最后满足有解时才反向
2、打出所有运动轨迹(所以每一步运动轨迹必须保存)。递归的条件是:1.至少在某行(列)上存在两个或两个以上的球,且其行(列)坐标差1 2.至少存在两个或两个以上的球,其行(列)的坐标差=1 import java.util.Random;public class Main private StringBuilder solution = new StringBuilder();public static void main(String args) Main main = new Main();/ main.doHit(main.generateTable(5, 5, 4);boolean tab
3、le = new boolean55;table00 = true;table20 = true;table30 = true;table24 = true;table03 = true;System.out.println(table is: n + main.getTableString(table);main.doHit(table);if (main.solution.length() = 0) There is not any solution); else main.solution.insert(0, There is a solution.nSystem.out.println
4、(main.solution.toString(); public boolean generateTable(int rowSize, int colSize, int nums) boolean table = new boolean;Random random = new Random();while (nums != 0) int x = random.nextInt(rowSize);int y = random.nextInt(colSize);if (table = true) continue;table = true;nums-;New generate table is:S
5、ystem.out.println(getTableString(table);return table;public boolean doHit(boolean table) for (int i = 0; i table.length; i+) for (int j = 0; j = 0 & !table) for (int k = i - 2; k = 0; k-) didHit = true;table = false;i = k; After hit, the new table is:n).append( getTableString(table);boolean result =
6、 checkAndDo(table, didHit);if (result) solution.insert(0, sb.toString();return result;private boolean goDown(boolean table, int i, int j) ) hit the ball by down going.if (i + 2 table.length &for (int k = i + 2; k for (int k = j - 2;j = k;private boolean goRight(boolean table, int i, int j) ) hit the
7、 ball by right going.if (j + 2 table0.length &for (int k = j + 2;private boolean checkAndDo(boolean table, boolean didHit) if (isEnd(table) if (didHit) return doHit(table);private boolean getNewCopy(boolean table) boolean copy = table.clone(); copy.length;copy = table.clone();return copy;private boolean isEnd(boolean table) boolean haveOne = false;if (table &haveOne) haveOne = true; else if (table & haveOne) private String getTableString(boolean table) if (j ! , OXreturn sb.toString();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1