本帖最后由 ChapterII 于 2020-5-15 21:43 编辑 
如果论坛中已经有大佬有了类似的思路或成品,请见谅.此贴需要一定命令基础
(并不指望多少人能听懂)
不会排版,不喜勿喷
大佬懒得看,萌新看不懂系列
 
 
 
 
(并不指望多少人能听懂)
不会排版,不喜勿喷
大佬懒得看,萌新看不懂系列
啊啊啊写了一天的帖子论坛弄没了虽然我又写了一遍
未更新完成,*表示未更新(咕咕咕)


DFS,传说中的深度优先搜索
度凉百科
先不用管回溯递归之类的
原理分析:
 图床炸了请通知作者
图床炸了请通知作者
比如上图红色羊毛位置是起点,蓝色羊毛位置是终点,
deep_first_search:search函数的内容:
#Search, search, search...
execute at @e[tag=dfsAS] if block ~ ~-1 ~ blue_wool run tellraw @a {"text":"Reached","color":"#123456"}
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool run setblock ~ ~ ~ stone keep
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool if block ~1 ~ ~ air run function deep_first_search:move_x1
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool if block ~-1 ~ ~ air run function deep_first_search:move_x_1
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool if block ~ ~ ~1 air run function deep_first_search:move_y1
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool if block ~ ~ ~-1 air run function deep_first_search:move_y_1
看不懂在说什么?只要你能看懂这几句命令的意思是
就可以
它会按顺序检测上、下、左、右分别有无方块,
如果无方块,将执行deep_first_search:move_x1或其他函数,该函数目的为向某个方向探索。
execute as @e[tag=dfsAS] at @s run tp @s ~1 ~ ~
function deep_first_search:search
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool run tp @s ~-1 ~ ~
这是deep_first_search:move_x1函数的内容 move_x_1等函数内容相仿,在此不贴代码了

分析:
执行function deep_first_search:search
后,在盔甲架处放置了石头
放置石头能够阻止AS探寻走过的路径,引发死循环※
同时游戏发现只满足了第二条/execute的条件
于是执行了deep_first_search:move_x1函数
在该函数中AS向下移动(为便于分析以玩家视角为准)

同时再次执行function deep_first_search:search函数
于是再次判断,AS下移,以此类推
直到第一个岔口处
此时发现满足了向下和向右的条件
此时由于在search函数中,
先判断了向下再判断向右
于是先执行move_x1函数
一直到……

此时到达拐角处,由于满足向右而不满足向下,
AS不断前进,以此类推


到达了死路
即这条支路已到达尽头
刚才函数的调用层次是search调用move_x1,move_x1又调用search
到达如上图这种状态时,不再满足任何一个execute
于是该函数结束
类似地,该函数结束后回到move_x1,继续执行function deep_first_search:search之后的
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool run tp @s ~-1 ~ ~于是AS原路返回
直到它来时的路上遇到的最后一个岔路口
即它回来时遇到的第一个岔路口
由于当时search函数里满足两个execute,一个执行完结束继续另一个
AS继续探寻另一条支路
……
……
……

它抵达了终点!
因为脚下是蓝羊毛,它不再返回
这就是
Deep first search,深度优先搜索
你是否对DFS有了初步的理解认知
不会的话再看一遍
度凉百科
什么是回溯?
回溯在这里指的不是某种特定算法,而是
在探寻一条支路后,原路返回到岔口,探寻另一条支路。
请等待作者更新
数据包:
在MC里生成一个带标签"dfsAS"的AS,放入一个闭合迷宫里输入/function deep_first_search:search
如果迷宫未闭合或没有终点(蓝色羊毛),听天(maxCommandChainLength)由命吧
鸣谢
SPGoding's Datapack Helper Plus
大憨批真的很好用!谢谢SPG!
所有在数据包方面帮助过我的玩家
请稍等如果作者还没死的话
如果论坛中已经有大佬有了类似的思路或成品,请见谅.此贴需要一定命令基础
(并不指望多少人能听懂)
不会排版,不喜勿喷
大佬懒得看,萌新看不懂系列
未更新完成,*表示未更新(咕咕咕)
 
 
2021.12 数据,可能有更多内容
如果论坛中已经有大佬有了类似的思路或成品,请见谅.此贴需要一定命令基础(并不指望多少人能听懂)
不会排版,不喜勿喷
大佬懒得看,萌新看不懂系列
啊啊啊写了一天的帖子论坛弄没了虽然我又写了一遍
未更新完成,*表示未更新(咕咕咕)


DFS,传说中的深度优先搜索
度凉百科
先不用管回溯递归之类的
原理分析:

比如上图红色羊毛位置是起点,蓝色羊毛位置是终点,
deep_first_search:search函数的内容:
#Search, search, search...
execute at @e[tag=dfsAS] if block ~ ~-1 ~ blue_wool run tellraw @a {"text":"Reached","color":"#123456"}
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool run setblock ~ ~ ~ stone keep
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool if block ~1 ~ ~ air run function deep_first_search:move_x1
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool if block ~-1 ~ ~ air run function deep_first_search:move_x_1
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool if block ~ ~ ~1 air run function deep_first_search:move_y1
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool if block ~ ~ ~-1 air run function deep_first_search:move_y_1
看不懂在说什么?只要你能看懂这几句命令的意思是
以@e[tag=dfsAS的身份,在该实体位置,如果~1 ~ ~/~-1 ~ ~/~ ~ ~1/~ ~ ~-1是空气(即无方块)且除非脚下是蓝色羊毛,则执行function deep_first_search:move_x1或别的
就可以
它会按顺序检测上、下、左、右分别有无方块,
如果无方块,将执行deep_first_search:move_x1或其他函数,该函数目的为向某个方向探索。
execute as @e[tag=dfsAS] at @s run tp @s ~1 ~ ~
function deep_first_search:search
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool run tp @s ~-1 ~ ~
这是deep_first_search:move_x1函数的内容 move_x_1等函数内容相仿,在此不贴代码了

分析:
执行function deep_first_search:search
后,在盔甲架处放置了石头
放置石头能够阻止AS探寻走过的路径,引发死循环※
同时游戏发现只满足了第二条/execute的条件
于是执行了deep_first_search:move_x1函数
在该函数中AS向下移动(为便于分析以玩家视角为准)

同时再次执行function deep_first_search:search函数
于是再次判断,AS下移,以此类推
直到第一个岔口处
此时发现满足了向下和向右的条件
此时由于在search函数中,
先判断了向下再判断向右
于是先执行move_x1函数
一直到……

此时到达拐角处,由于满足向右而不满足向下,
AS不断前进,以此类推


到达了死路
即这条支路已到达尽头
刚才函数的调用层次是search调用move_x1,move_x1又调用search
到达如上图这种状态时,不再满足任何一个execute
于是该函数结束
类似地,该函数结束后回到move_x1,继续执行function deep_first_search:search之后的
execute as @e[tag=dfsAS] at @s unless block ~ ~-1 ~ blue_wool run tp @s ~-1 ~ ~于是AS原路返回
直到它来时的路上遇到的最后一个岔路口
即它回来时遇到的第一个岔路口
由于当时search函数里满足两个execute,一个执行完结束继续另一个
AS继续探寻另一条支路
……
……
……

它抵达了终点!
因为脚下是蓝羊毛,它不再返回
这就是
Deep first search,深度优先搜索
你是否对DFS有了初步的理解认知
不会的话再看一遍
度凉百科
什么是回溯?
回溯在这里指的不是某种特定算法,而是
在探寻一条支路后,原路返回到岔口,探寻另一条支路。
请等待作者更新
数据包:
在MC里生成一个带标签"dfsAS"的AS,放入一个闭合迷宫里输入/function deep_first_search:search
如果迷宫未闭合或没有终点(蓝色羊毛),听天(maxCommandChainLength)由命吧
鸣谢
SPGoding's Datapack Helper Plus
大憨批真的很好用!谢谢SPG!
所有在数据包方面帮助过我的玩家
请稍等如果作者还没死的话
 本帖最后由 ChapterII 于 2020-5-15 21:42 编辑 
自占一楼awaawaawa
自占一楼awaawaawa
有丶意思,再来个BFS
还行,就是这个方块有点亮眼
minecraft小器 发表于 2020-5-11 12:42
还行,就是这个方块有点亮眼
一言难尽的诡异
卧槽,这,,nb,来个动规
我在想。。。可不可以做一只指定出生点的要下蛋的海龟(可以从nbt调的)
想过 之前尝试用遍历判断实体是否可以连成一条通路
然而失败了(
然而失败了(
我去,这个这么强的吗,我去1.8试试行不行
应该不是判断实体
dianya 发表于 2020-5-15 07:35
我去,这个这么强的吗,我去1.8试试行不行
1.16测试的,1.8没有函数