`
openxtiger
  • 浏览: 151104 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

看看谁聪明,类游戏寻找算法

 
阅读更多

 

〇  X  〇 〇 〇

〇 〇 〇 〇 〇

〇 〇 〇 〇 〇

〇 〇 〇 〇 〇

〇 〇 〇 〇 〇

不过X点,把所有的圈连起来,不能重复,不能斜连,不能跳圈

 

本人用了游戏寻路算法做了一个程序,没有解出答案,如果差一个圈的有1064个解法。欢迎高手们解答

 

import java.util.ArrayList;

/**
 * @author xtiger (xtiger@microsoul.com) 2015-09-09 23:39
 */
public class Game {
    private static int[][] t = new int[7][7]; //记录圈子,外围多加一圈,免得判断 ,0:可以走,1:走过,2:不可走
    private static int r[] = new int[25];     //记录结果
    private static int i = 2;                 //当前圈子的x
    private static int j = 1;                 //当前圈子的y
    private static int idx = 0;
    private static int bb = 1;
    private static ArrayList<String> die = new ArrayList<String>(); //记录走不通的路线

    public static void main(String[] args) {

        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 7; j++) {
                if (i == 0) {
                    t[i][j] = 2;
                }
                if (i == 6) {
                    t[i][j] = 2;
                }
                if (j == 0) {
                    t[i][j] = 2;
                }
                if (j == 6) {
                    t[i][j] = 2;
                }

            }
        }
        t[1][2] = 2;

        t[1][1] = 2;
        t[2][1] = 2;
        r[idx++] = 11;
        r[idx++] = 21;

        while (true) {
            if (up() == 1) continue;
            if (right() == 1) continue;
            if (down() == 1) continue;
            if (left() == 1) continue;
            back();

            int b = 0;
            for (int x = 1; x <= 5; x++) {
                for (int y = 1; y <= 5; y++) {
                    b += t[x][y];
                }
            }
            if (b == 26) {
                echo1();
                continue;
            }
            if (b == 28) break;

        }

        System.out.println("GOOOOOOOOOOD---------------");
        echo1();
    }

    private static int up() {
        if (checkDie((i - 1) * 10 + j)) {
            return 0;
        }
        if (t[i - 1][j] == 0) {
            r[idx++] = (i - 1) * 10 + j;
            t[i - 1][j] = 1;
            i--;
            return 1;
        }
        return -1;
    }

    private static int right() {
        if (checkDie(i * 10 + j + 1)) {
            return 0;
        }
        if (t[i][j + 1] == 0) {
            r[idx++] = i * 10 + j + 1;
            t[i][j + 1] = 1;
            j++;
            return 1;
        }
        return -1;
    }

    private static int down() {
        if (checkDie((i + 1) * 10 + j)) {
            return 0;
        }

        if (t[i + 1][j] == 0) {
            r[idx++] = (i + 1) * 10 + j;
            t[i + 1][j] = 1;
            i++;
            return 1;
        }
        return -1;
    }

    private static int left() {
        if (checkDie(i * 10 + j - 1)) {
            return 0;
        }
        if (t[i][j - 1] == 0) {
            r[idx++] = i * 10 + j - 1;
            t[i][j - 1] = 1;
            j--;
            return 1;
        }
        return -1;
    }

    private static boolean checkDie(int next) {
        return die.contains(getPath(idx) + next + "/");
    }

    private static boolean back() {

        String p = getPath(idx);
        if (!die.contains(p))
            die.add(getPath(idx));

        if (idx > 0) {
            idx--;
            if (t[r[idx] / 10][r[idx] % 10] == 1) {
                t[r[idx] / 10][r[idx] % 10] = 0;
            }

        }

        if (idx > 0) {
            i = r[idx - 1] / 10;
            j = r[idx - 1] % 10;
            return false;
        }

        return true;
    }

    private static String getPath(int pos) {
        StringBuilder s = new StringBuilder();
        for (int x = 0; x < pos; x++) {
            s.append(r[x]).append("/");
        }
        return s.toString();
    }


    private static String getPos(int v) {
        for (int x = 1; x <= 25; x++) {
            if (r[x - 1] == v) return "" + (x + 10);
        }
        return "  ";
    }

    private static void echo1() {
        System.out.println();
        System.out.println((bb++) + ". -----------");
        for (int x = 1; x <= 5; x++) {
            for (int y = 1; y <= 5; y++) {
                System.out.print(getPos(10 * x + y) + " ");
            }

            System.out.println();
        }

    }

}

 

 

 如果差一个圈的有1064个解法,展示一部分:

1. -----------
11    15 16 17 
12 13 14    18 
31 30 25 24 19 
32 29 26 23 20 
33 28 27 22 21 

2. -----------
11    15 16 17 
12 13 14    18 
31 32 25 24 19 
30 33 26 23 20 
29 28 27 22 21 

3. -----------
11    15 16 17 
12 13 14    18 
33 32 25 24 19 
30 31 26 23 20 
29 28 27 22 21 

4. -----------
11    15 16 17 
12 13 14    18 
29 28 25 24 19 
30 27 26 23 20 
31 32 33 22 21 

 

0
2
分享到:
评论
2 楼 openxtiger 2015-09-21  
太强了,一点都看不懂
1 楼 metaphy 2015-09-15  
无解. 定义n(A)为从A点发出的射线数, 若有解,则

n(0,0) = 1, 必为始点或终点
n(0,1) = 3, 必为始点或终点
n(1,1) = 3, 必为始点或终点

导致矛盾

相关推荐

    华为软件精英挑战赛采用模拟退火算法+首次适应算法寻找最优化放置虚拟机源码.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的竞赛项目学习资料...华为软件精英挑战赛采用模拟退火算法+首次适应算法寻找最优化放置虚拟机源码.zip

    游戏开发中的经典算法

    游戏开发中的经典算法是编程实践中不可或缺的部分,它们是解决问题的核心工具,通过精心设计的步骤来指导计算机执行任务。算法的设计和实现是程序设计的核心,它将抽象思维转化为计算机可理解的语言。在这里,我们将...

    非常优秀的棋牌类游戏源码,包含AI及机器人的难度调节算法

    非常优秀的棋牌类游戏源码,包含AI及机器人的难度调节算法

    首次适应算法 最佳适应算法 循环首次适应算法 

    最佳适应算法与首次适应算法相反,它会在所有空闲分区中寻找最小的能够满足进程需求的分区进行分配。这样可以尽可能地保留大块的空闲空间,减少内存碎片。然而,最佳适应算法可能会导致大量小的空闲分区产生,增加了...

    数据挖掘18大算法实现以及其他相关经典DM算法

    遗传算法运用了生物进化理论的知识来寻找问题最优解的算法,算法的遗传进化过程分选择,交叉和变异操作,其中选择操是非常关键的步骤,把更适应的基于组遗传给下一代。详细介绍链接 DbScan 基于空间密度聚类算法。...

    java算法全卷(包括基本算法和图算法)

    图算法是处理网络结构和关系的强大工具,广泛应用于网络分析、路由规划、社交网络和游戏设计等领域。以下是一些重要的图算法: 1. 广度优先搜索(BFS):用于寻找最短路径或遍历无权图,例如求解两节点间的最短路径...

    a* 算法 人工智能 拼图游戏

    a*算法是一种高效的路径搜索方法,常用于解决寻路问题,而拼图游戏正是需要寻找正确序列或路径的一种逻辑挑战。 首先,让我们详细了解一下a*算法。a*算法是Dijkstra算法的一个扩展,它结合了最佳优先搜索(如广度...

    算法文档无代码解析一类组合游戏

    标题中提到的“算法文档无代码解析一类组合游戏”指的是使用算法对一类没有现成代码的组合游戏进行解析,以理解其规则、玩法和潜在策略。组合游戏通常是指那些依赖于组合元素或策略的益智游戏,比如拼图游戏、棋类...

    粒子群算法、遗传算法以及两者的结合的优化算法

    粒子群算法(Particle Swarm Optimization, PSO)与遗传算法(Genetic Algorithm, GA)是两种在优化问题中广泛应用的全局搜索方法。它们都是基于自然选择和群体智能的启发式算法,能够有效地解决复杂多模态优化问题...

    贝叶斯网络学习算法――k2算法

    贝叶斯网络是一种概率图模型,它利用贝叶斯定理来表示变量之间的条件依赖关系。在数据挖掘和机器学习领域,贝叶斯网络被广泛应用于分类...理解并掌握这类算法,对于提升数据驱动的决策能力和问题解决能力具有重要意义。

    模型算法大全(20+种常用算法模型+代码实现)

    模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+...

    游戏编程核心算法

    非常好的一本关于游戏算法设计的书!

    写给大家看的算法书

    , 《写给大家看的算法书》对于理解信息处理的基础——算法而言,是一本非常优秀的入门读物。作者采用大量生动的类比,配合简洁易懂的配图,深入浅出地讲解算法,极大地拉近了读者与算法的距离。通读全书,读者可以...

    路径规划几种算法的比较与分析

    该算法的基本思想是模拟蚂蚁在寻找食物时留下的化学物质 trajectory,通过这种方式来寻找最优路径。蚁群算法的优点是具有较强的鲁棒性,能够适应复杂的路径规划问题。 蚁群算法的实现步骤如下: 1. 初始化蚂蚁的...

    连连看算法 连连看算法

    连连看算法是連連看游戏中的一种核心算法,该算法主要解决了游戏中连通两个点的问题。该算法的要求主要有两个:一是要连接的两点上的图形相同,二是两点间存在一条没有障碍的路线,并且折点不超过两个。 连连看算法...

    压缩感知重建算法——GPSR算法

    在CS理论中,GPSR(Gradient Projection for Sparse Reconstruction)算法是一类重要的重构算法,因其高效的性能而受到关注。 GPSR算法的核心思想是基于梯度投影,它分为两个主要部分:梯度下降和投影到稀疏空间。...

    基于matlab实现的RRT算法、双向RRT算法、A*算法、PRM、模糊路径规划算法、遗传算法路径规划

    在机器人路径规划领域,有多种算法用于解决机器人在复杂环境中找到最优或近似最优路径的问题。这些算法在MATLAB环境中得到了实现,便于理解和调试。以下是关于这些算法的详细描述: 1. **RRT(快速探索随机树)算法...

    禁忌搜索算法(禁忌算法)+蚁群算法

    禁忌搜索算法(禁忌算法,Tabu Search)与蚁群算法(Ant Colony Optimization, ACO)是两种在优化问题中广泛应用的启发式搜索方法。这两种算法都源于自然界的智慧,能够处理复杂的非线性优化问题,尤其在组合优化...

    算法大全(包括各种算法及模型的详细介绍)

    而搜索算法,如二分查找和广度优先搜索,则是在大规模数据中寻找特定元素或路径的利器。此外,图论中的算法,如Dijkstra最短路径算法和Floyd-Warshall所有对最短路径算法,对于网络优化和路径规划有着重要作用。 ...

    基于蚁群算法和Dijkstra算法的二维路径规划

    接着,我们来看Dijkstra算法。这是一种经典的图论算法,用于寻找图中两个节点之间的最短路径。Dijkstra算法基于贪心策略,每次扩展当前最短路径节点,直到到达目标节点。虽然Dijkstra算法在处理大规模网络时效率较低...

Global site tag (gtag.js) - Google Analytics