拼图最后两张图片异位问题的解决 您所在的位置:网站首页 两张图片拼图怎么换位置 拼图最后两张图片异位问题的解决

拼图最后两张图片异位问题的解决

2024-06-24 19:45| 来源: 网络整理| 查看: 265

// 初始化图片 public void initView() { for (int i = 0; i < number.length; i++) { number[i] = gameover[i]; } // 将图片随机化 for (int i = 0; i < number.length - 4; i++) { int temp = number[i]; int index = (int) (Math.random() * (number.length - 5)); number[i] = number[index]; number[index] = temp; } initGame(); getlist(); // 判断生成是否有解 if (canSolve(data)) { return; } else { initView(); } socer = 0; tv2.setText("当前移动了 " + String.valueOf(socer) + " 步"); } // 将图片添到布局 public void initGame() { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (j + i == 8) { iv_group[i][j].setImageResource(number[24]); } else { iv_group[i][j].setImageResource(number[i * 5 + j]); } } } } /** * 获取data * */ public void getlist() { data = new ArrayList(); for (int i = 0; i < number.length - 4; i++) { for (int j = 0; j < number.length - 4; j++) { if (number[i] == gameover[j]) { data.add(j); } } } System.out.println("============" + data.toString()); } /** * 该数据是否有解 * * @param data * @return 该数据是否有解 */ public boolean canSolve(List data) { // 可行性原则 return getInversions(data) % 2 == 0; } /** * 计算倒置和算法 * * @param data * @return 该序列的倒置和 */ public static int getInversions(List data) { int inversions = 0; int inversionCount; for (int i = 0; i < data.size(); i++) { inversionCount = 0; for (int j = i + 1; j < data.size(); j++) { int index = data.get(i); if (data.get(j) < index) { inversionCount++; } } inversions += inversionCount; inversionCount = 0; } System.out.println("******" + data.toString() +"============"+ inversions); return inversions; }

拼图游戏虽说简单,但是当拼图的行列数是奇数时,就会出现著名的puzzle问题

这种情况就需要倒置数进行判断  

当拼图的行数为偶数时,倒置数为奇偶都可以

当拼图的行列数为奇数时,

如果空白图片从最底层往上数是奇数,倒置数则需要为偶数

如果空白图片从最底层往上数是偶数,倒置数则需要为奇数



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有