Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 给定玩家可以访问哪些位置?_C#_Algorithm_Unity3d - Fatal编程技术网

C# 给定玩家可以访问哪些位置?

C# 给定玩家可以访问哪些位置?,c#,algorithm,unity3d,C#,Algorithm,Unity3d,比如说,如果你有一个4乘4的图表,并按照下面的顺序排列 我想完成的是,当我点击其中一个片段时,我想看到该给定片段的所有可用移动,而不需要移动另一个片段。比如说, 以编程方式完成此任务的最佳方法是什么?我在Unity中做这件事,但我最好奇的是看到一个算法来做这件事。DFS是一个简单的算法,可以实现你想要的 它的工作原理如下: DFS(x, y): mark[x, y] = true for i = -1 ... 1: for j = -1 ... 1:

比如说,如果你有一个4乘4的图表,并按照下面的顺序排列

我想完成的是,当我点击其中一个片段时,我想看到该给定片段的所有可用移动,而不需要移动另一个片段。比如说,


以编程方式完成此任务的最佳方法是什么?我在Unity中做这件事,但我最好奇的是看到一个算法来做这件事。

DFS是一个简单的算法,可以实现你想要的

它的工作原理如下:

DFS(x, y):
    mark[x, y] = true
    for i = -1 ... 1:
        for j = -1 ... 1:
            if (x + i) < 0 || (x + i) >= columns  //outside of matrix
                continue
            if (y + j) < 0 || (y + j) >= rows     //outside of matrix
                continue 
            if mark[x + i, y + j]                 //already seen
                continue
            if matrix[y + j, x + i] is empty
                print("You can go to position (" + (y + j) + ", " + (x + i) ")");
                DFS(x + i, y + j)
它将查找所有可用的插槽并将它们提供给您


您可以通过调用DFScolumn,row和您的初始位置来启动它。

听起来像是一个迷宫路由问题,请查看lee算法作为示例。你只是没有目标位置-重复循环,直到你没有地方移动,没有要标记的点。看起来你想要一个DFS。