00:00
同学们,现在呢?我们来完成一个递归的实际应用案例,迷宫问题。刚才呢,我们已经把这个迷宫问题的需求给同学们说了一下哈,然后呢,我这里先说一下,因为目前呢,我们在讲数据结构的时候呢,没有必要把这个界面也写出来,对吧,所以说我们只写底层的算法,就是底层的这个迷宫问题的求管求解的这个代码,至于这个界面呢,我们就不去画它了。好吧,就说我在底层里面用一个数组把它搞定就行了,那同学们现在呢,我们开始根据这个需求来写代码,来写代码好打开我们这个地方,然后呢,我们写第一个案例叫迷宫,我简单写一个啊,叫迷宫。迷宫。OK,把主控把勾上。主方法勾上。那第一步我们应该做什么事情呢?是不是我们第一步先要把这个迷宫给模拟出来,是这意思吧,所以说我们先这样子干什么呢?先创建创建一个。
01:09
一个二维数组模拟,模拟这个迷宫。没问题吧,同学们模拟迷宫,好,现在呢,我们就开始写一个地图。写一个地图。地图好,用二位数组来搞定好in。好,然后呢,二维数组map。等于六一个int。嗯,那么这个英特尔多大呢?八七就可以了,为什么?大家数一下。是不是我们这个迷宫,当然这个墙也要算上了,一共是几行啊?一行两行,三行,四行,五行,六行,七行,八行几列呢?一列两列,三列,四列,五列,六列七列,所以说八行七列没问题吧。这个就创建起来,创建起来过后呢,我们。我们来这样做,大家有没有发现它红红色的部分,我们表表示是墙是这意思吧,所以说我们先把先使用这样子啊,我们约定使用一一表示表示强。
02:18
这个墙就不能不不能去过的这么一个位置表示墙,那现在呢,我们怎么做呢,先把上下。先把上下全部置为。字为一。字为一,那怎么样把上下字为一呢?也就是说把这一块同学们看,就把这。这是为一,实际上你字为一的时候,大家有没有发现,主要是你的列在变。是,而你的行不变,行是不是就是第零行和第七行,然后列就是零到几啊,零到我们的这个。六试一试吧,好,所以说我们先把这上下全部置为一模拟强,那就负循环了,负循环。
03:07
Int I,咱们等于0I小于7I加加没有任何问题吧。好,现在麦。第零行。第零行的所有的列我们全部置为一,因为它默认为零嘛,然后第几行呢,第七行所有的列全部也是为一。好,也就是说当我们这样做完了以后呢,同学们可以想象我们这个二维数组的第一行和第七行全部为一了,现在我们还需要把什么呢?把左右是不是左右全部置为。字为一。对吧,字为一表示强嘛,那么左右字唯一,大家想一想是什么逻辑,是是不是这样子的同学们。是这一排。那这一列,而这一列谁在变化呢?同学们想,是不是主要是列在变化?而行和而主要是什么呀?是它的行在变化,列不变化。
04:08
说这个列式基底列呢,这第零列,这是第六列,而它的行是零到七在变化是意思吧,好,所以说现在呢,我们又来写这段代码。For循环in ti等于零,I小于多少呢?小于八,因为你待会要变化的是这个嘛,是吧,I加加开写map走,然后这边是I等于几I几I0等于一,然后map I几呢?第几列,第六列,呃,第七列,第七列其实就是六码下边为一,好,当我们这样处理完了过后,实际上就全部啊这个一了,现在呢,我们输出一下,输出这个地图,输出这个地图其实挺简单,就是便利一下。遍历一下,那我们先把这个地图呢,简单遍历一把啊,For int I等于零,I小于八对不对,我这就写死了啊同学们,我这就写死了,然后再for循环一下,解等于零,解小于几呢?解小于七。
05:13
这是呃,先是行,再是列嘛,对不对,结加加结加加,然后我们输出输出这样好看,待会输出的时候我们就很简单,就是I。节。对不对,然后每输出一个呢,我们给它打一个空格。这个这个在输的时候,这边不要咱就不换行了,输出了一行过后再换行。没问题吧?好,说说这是地图,这是当前这个地图的情况,我们说出一句话。哦,地图的情况。地图的情况好,现在呢,我们把这个代码进行一个简单的格式化。好,运行下看效果。同学们看,现在这个地图呢,实际上是这样子的,跟我们想的一样,就是第一行全部唯一,第最后列行全部为一,第一列和最后一列全部唯一,中间这个零代表是空的。还有一个问题,同学们看。
06:12
因为在我们这个图里面呢,这两块也是红色的,因此我们把它设成一个墙,或者叫设成挡板,来我们看一下这两个位置是什么,大家动脑,你看这个位置是第几行几列,这个位置位置是第几行,第几列是不是第一个是我们的第四行,第二列其实就是什么呢?就是下标,就是我们的下标为三一,这个是几呢?这个是解三二是不是好,所以说我把这个呢设成挡板。好设挡板来走一个,那么在这呢,我们再设置相应的挡板。二设置挡板。这个挡板呢,我们也用一表示就是一就是不能走的地方,说白了那就直接写啊map。刚才说的是卖131,还有一个麦几呢三二。
07:06
是不是也是一啊,现在我们再运行一下。同学们可以看到现在呢,跟我们想的是一样的了。好,现在有了这一个地图过后,我们现在就开始来写代码,完成它。那这个代码怎么写呢?我们先做一点注释啊,待会儿呢,我们写一个方法这样子的使用递归。递归回溯,来来找来,给小球小球找路。是不是找找到这个路,那现在我们就开始写这个方法,Public static怎么呢?返回一个bulling值,如果找到了,我们就返回一个布为帧,找不到返回一个false能理解,那么我就写个方法叫setway。那么我们在给小球找路的时候,我们需要什么变量呢?首先你要把这个地图传过来,我才能帮你找,第二个你要告诉我从哪个位置找。
08:01
明白这个意思吧,好,我在这做点注释。我们先做一下这个map表示什么,表示这个地图。是共享的I表示,呃,从哪个。哪个?哪个位置位置。开始找。对不对,解解也是一样,那么返回值是如果找到返回针,如果找到路了,因为有可能一个就找不到路嘛,找到这个通路了,通路。哎,通路。通路就返回处,否则返回false。能理解好下面的代码呢,我们就要开始写了,在写之前我们有些约定俗成的东西来,我要做做些约定啊,因为你不做约定,这个代码写不了,我们先做些说明。说明。不不不,说明这个写不了啊,首先我们要知道map表示的是地图这个大,这个大家没有疑惑啊,第二点呢,我们要表示的是埃及哀节表示从地图。
09:13
的哪个位置开始开始出发。比如说我们现在呢,出发点应该是一一。就说我是从哪里开始找的呢?从我们地图的这个位置。开始出发,走。那么找到哪个位置表示结束呢?就这个位置表示结束,因此我们我们要知道这是出发点,这是结束点。这个就说你这个递归结束,其实是以我们这个地方能够就是小球能到这个地方来就表示结束,说这个位置一定要搞清楚的,你搞不清楚后面是要出问题啊,还有一点呢,我们要知道。如果,如果小球,小球能。能到哪里呢?能到这个map的六五,大家看这个位置啊,能到六五这个位置。
10:06
则则说明,则说明通路找到。通路找到这个大家没有疑惑吧,你想一想,六五是哪个位置啊,实际上就是这个位置。就是我们的第七行的第几列,第六列。是不是好,这有了有这些供货,我们还要说一点,第四点就是我们必须要做一些约定,我们要对这个找出做一些约定,什么约定呢,就是零。当注意听当这个地图的这个埃及,注意听这句话啊,埃及它为零时表示什么呢?表示这一点还没有走过,就是还没有测试过,表示该点。该点没有走过。这个大家明白这意思吧,当等于什么事呢?当为当为一的时候表示强。
11:03
强肯定是不能走的,这个能理解吧,就是刚才我不是我们已经已经设置了,有些是一吗?一代表强不能走。当如果是为二呢,我们再来试一下,如果为二,我们就设计好,这是一个什么呢?表示是一个通路可以走。表示通路。通路。可以走。大家理解我的意思吧,就是二,如果是这个二这个点呢,就表示我们这条路是可以走的,就好比刚才我们在看的是你看最终在底层,这个二就是一条它最终的一条行进的路径。能能力表还有一条路必须要去搞定,因为你在探测的时候呢,有可能这条路你颤了,但是走不通,就是三,如果这个地方为三表示什么呢?表示已经探测过了,表示该点该位置也可以啊,该位置已经走过。已经走过,但是走不通,就是我已经,就好像有一个人在迷宫里面走,走了过后呢,发现这条路是死路,他就插了一个小红旗,表示已经探过这条路了,但是走不通。
12:10
明白我的意思吧,但是走不通。如果你走不通,你下次就不要再去探测了,因为你在回溯的时候呢,就无需再去回溯这条这条路径。好,这个写完了以后,同学们现在呢,我们还有第五点要说清楚。同学们,你们有没有玩过这种迷宫游戏啊?就是说你在去玩这个迷宫的时候,是不是你事先是要定一个策略的。大家知道我在说什么吗?就是说你你再去玩一个迷宫游戏,你要出来是不是你自己要有一个策略,是先走哪个方向,再走哪个方向,再走哪个方向,走不通再回到上面那个位置再走啊。大家知道我在说什么吗?就说我们必须在走之前定一个策略,就是在。在这个,呃,在走迷宫时,迷宫时。
13:03
我们需要。需要确定确定一个啊一个策略,这点大家不知道有没有听过啊,策略什么叫策略呢?就是我的我这个方法,就是我我我怎么去玩这个东西,我们现在假定这样去玩啊,我们的策略是先走下面。下面这个地方走不通,我们再左右面。右面走不通,我们再走上面这条线,上面走不通,我们再走左边这条线。这就是我的一个策略。因为你有四个方向可以走,所以说到底你是先走上还是先有下,你总得有个策略嘛,那你想你四个四个四个路径都有可能选择,那这个可是个组合呀。是不是,所以说你先得定一个策略,因为你不同的策略,最后找到的路径肯定是不一样的,明白我的意思吗?你比如说吧,你比如说为什么现在我的小球是这样走的呢。
14:04
是我的策略相关,假如我我上来过就先走上面,我总是先走上面再走再走右面,那可能这条路径就应该是这样走的了。是不是,而现在我刚才给你们演示的实际上是这条线。是不是,所以说这个跟策略有密切的关系,跟密切的关系好我们现在定的是下右上左,如果走不通再回溯。注意听啊,如果该点该点走不通。走不通,再回溯。再回溯。好了,同学们,那代码有了,我们开始就可以开始玩这个东西了啊,来,开始写代码。如果我们先把这个推出指令提出来,如果MAP65等于了几等于二了。如果这个MAP6等于五,二的,是不是说明只要走到这个位置,而且你把六和五已经制成二了,说明已经找到了。
15:04
说明什么呢?说明这个通路通路已经找到OK了。那这个时候就不用再犹豫了。直接一个处。你理解我意思吧,如果我们在递,我们在这个递归的时候,我们发现呢,迈普六和五还没有,还没没有等于二说明这个路还没有找到,那没有找到的话呢,你这个值就有这么几个情况,有有可能是零,有可能是一,也也也有可能是二,有可能是三。因为你还现在迈步六五还没有等于零嘛,所以说这边就要分情况来说,好,我们现在呢这样做,先看先看你这个路走没走过。这个地方稍微有点绕啊,如果当前这个点还没有走过,是不是I解等于零。大家明白我在说什么,就说如果当前这个点没有走过。如果当前这个点还没有,还没有走,没有走过,因为默认,嗯是礼貌说明肯定是还没有走过吗?刚才不是写的零表示没有走过,没有走过的话呢,是不是我们就可以按照这个策略来玩一把。
16:14
明白我意思吧,就是按策略玩一把。按照。按照这个策略走。那你在走之前是不是先把它设置为一个map等于二,就是在走之前我们先把标一个号数二,我我认为是个通路可以走,但实际上是不是还要回溯?能理解这意思吧,所以说我们现在过先把这个。先把这个点标成二。就说我假定这个点是能走通的,注意听这句话啊,假定。就是说认为假定假定该点,该点是可以可以走通的,但是这个假定是假定,他到底能不能走通不知道。
17:00
你怎么知道他能走通还是不能走通呢?就按这个策略走一把才知道。能理解我的意思吧,就我上来过后,你你你这个没有走过,我就我就假定可以走,就好像一个人在玩的时候,我先我先怎么样往前面走一步,说诶这个可以走通,但是你这个到底能不能走通,是不是你还要去探测上下左右啊,所以说现在就开始开始继续探测了,那怎么怎么走呢,叫if。Eve。如果我按这个点往上走。就这样写了啊,就是set we。Setway。如果我在这个点走的时候呢,先向向下走。下周。向下走啊,向下走就是我在这个点的基础上向下走,向下走怎么样才能体现线下走是I加一。因为你这个向下走的话,这个行是往下呃,增加吗?如果这个地方能走通好,我就返回一个处。
18:06
啊,返回一个处,大家认真听啊,这个稍微有点绕了。TRUE。TRUE。就说我我先把它标成一个二,然后呢,在这个点的基础上向下走,因为我有策略嘛。好,OK,向下走,如果这条线按这个往下递归,如果真的走通了,说明的的确确这条线是可以通的,但是有可能他走不通啊,走不通是不是我们就尝试着干什么呢。向。右走。就说我在这个点的基础上回来了,然后呢,我往右边再走一走,看看能不能走通,那向右走这段代码应该怎么写呢,各位朋友。是不是sideway把哪个改一下就意味着是向右走啊,是不是怎样体现出向右走,是不是把这个节加一就是向右走。是不是,那这个右如果能走通就可以,但但是我知道啊,再说一遍,如果线下走真的整条线能够走通,是不是它就不会呃,不会进入到这个SE了,因为你是if else这个分支控制嘛,好像。
19:15
右走。右走。那么向右走能不能走通不知道,所以说我们再写,如果它向右走,整个这个就返回一个force,那我就怎么样啊,就在这个点的基础上,向什么走呢?向我们的上走,因为我是上右下走,对不对,向上走这个代码应该怎么写,同学们。应该怎么写?向上向上走的话,把哪个改一下就可以了,把I减一。这个是不是向上走。向上走好,如果说向上走能走通,当然我就返回一个针,如果你这个地方也是一个force,是不是我还有一个逻辑说,假如这条没有走通,这条没有走通,这条有没有走通,是不是我就应该在这个点的基础上向左走。
20:02
是不是这个策略每一个地方都有这样一个过程呢?S好else,那如果是S的话呢,那说明现在我们是向下向右向上,哦,对,那这个把这个if加上啊,把这个条件写进去。走。那现在是向什么地方走呢?应该是向左走,向左走应该把哪个改一改,把哪个改是不是节减一就可以了。这个是不是向右向左走。向左走,诶向左走。好,如果向左走能够走通,我们就走通好了。同学们思考,请认真思考,如果我们在这个点的基础上,就是说假定我们原先假定这个埃及是可以走通的,但是我发现下没有走通。上呃下没走通,右没有走通,上也没走通,左也没走通,说明什么问题?说明你这个点根本就走不通。
21:03
是不是就这个点是个死,就说相当于是个死路,你走到一个死路了,那么如果说是一个死路,你应该怎么办,是不是按照我们的规定。说这个三这个点我已经测试过了,根本没法玩。因此我要把它制成什么呀?制成这个三说明什么呢?说明该点,该点是走不通的,走不通的是什么呢?是死路。是实物。如果是死路,各位同学是不是应该把这个I截重新置为三?各位同学思考。这个map埃及和这个map埃及是不是同一个,就是同一个,因为他们在同一个站里面,学生相说他往里面递归,递归完了回来了,回来发现确实走不通,你原先制成这个二是假的,就你假定走通是不对的,其实他走不通,然后你就把这个二重新置为三。
22:02
然后再返回一个false,代表这条路别走了。别走了。能理解啊好,那么还有一种可能性大家看。如果你这个麦普进来,这个I截等于零是这样走的,那么迈普I截不等于零会怎么样呢?就是一个L式的关系。那么我问大家一个问题。如果当前在探测这个点map,它不等于零,它,它有可能是什么值?注意听这句话啊。如果迈普埃及。埃及它不等于零,你你上面这个if是等于零,那下面这个S就是代表不等于,不等于零的话,它这个map它有可能是什么值呢?它就有可能是这几个值。可能是什么字呢?注意可能。可能是这几个字,那么它有可能是一,可能是二,可能是三。那如果是一,是不是代表是一种强啊?
23:01
二代表什么?代表人家已经走过了,趟过这条线了,你不要再趟了。三是什么?代表已经趟过,但是是死路。代理业务在说什么?就是说如果它等于零,当然我们按照这条路来进行探测,如果你上来过后,在递柜中发现这个map ID不等于零,那只能是123,而一是墙,肯定不能走。二呢,说明人家已经走过了,已经标了一个小,标了一个小小的,那个比较通行的这个绿绿绿的小小绿的小插旗说,诶,可以走,已经走过了,你也不要,不要再反复走了。三呢,是走过,但是是条死路,那这个时候应该怎么怎么玩呢?直接返回一个force。注意吧。Re,七二,返回一个false就可以了。这点有点不好理解啊,同学们,待会呢,我们画一个图,再呃,就根据这个图再描述一下就好,同学们,到此为止,这段代码就写完了。也就是说,我一个简单的这个迷宫找路的问题就解决了。
24:02
老师,这个东西我怎么看了,完了我一点感觉都没有呢。那说明你这个就说,因为这个本身有点难度了嘛,对不对,有点难度,所以说你一时半会理解不了是有可能的,那待会我们先把这个代码跑起来,跑完了过后,我们再根据这个案例再再给大家演示一下,再拿个图来说一下加深认识好不好,来我们先玩一把吧,看看我找了路过后现在行不行,好,现在呢,我们来。找一下路啊,使用使我们来,呃,使用递归,使用递归回溯。回溯。回溯,给小球找路。那么给消息导入,实际上就是调用我刚才写的sideway。这个I和I节应该是从哪里啊,是不是从一一这个位置开始走的。能理解,走完了以后,大家知道此时此刻在调这个set位的时候,这个map它是一个引用类型,是不是引用类型的话,在整个这个过程中,他们不管调用产生多少个站,实际上都是修改同一张地图。
25:09
能理解好,此时此刻掉完了过后我们再输出这个路就可以了。这是啊,在输出新的这个地图。这个地图就是什么呢?小球走过的走过并并测试探探测过的啊,探测。探测走过并标识过的啊,叫标识吧,标识。标标识写错了标识。标识过的这个地图有通路,那就是二,如果没有通路可能就删了,那么我们再把这个地图打出来看一下就行了,来走一个,把这个代码呢,我们写到这地图走过的啊,小球走过并标识过的地图。好,它的情况是怎么样呢?打印出来,来玩一把,看看能不能找到通路,走一个运行车,诶同学们可以看到,同学们可以看到,大家看原先这条路呢,没有标识,你看这小小走过是怎么走的,你看。
26:09
大家看。是不是这样子的。是不是二就代表一条通路?二代代表一条通路,那么同学们看这段代码呢,可能有点吃力对不对?说老师这个感觉好像突然一下有点懵呢。我说了啊,我在讲数据结构算法的时候,其实第一天我就讲过了。数据结构,结构和算法,我尽量讲的通俗易懂,但是它仍然是有难度的,就说你要去学,你要去学一个相对高深的武功,你就是再简单。你都要付出很大的努力,那这样子吧,我针对这个代码给大家简单的再诶说一说,看一看,大家看看能不能理解好,我把这个打打开给大家,呃,来照这个地图呢,给大家,给大家再看一看,大家看看能不能理解好,能不能理解好,我们现在呢,这样来来了解同学们看。
27:05
假定假定我们这个第一次进来,这是个地图嘛,我们传进来是一个零。21和一。那么一和一是不是你刚进来的时候,这个麦六五现在初始化是零,这没动过是吧,所以说他应该进入。Else语句,那么else语句它原先第一点是不是原先这个地方应该是零的呀,刚还没动是零,零的话,是不是就是它听到这个if语句里面,If语句是不是在他在这个点就开始按照我们。下呃,按照我们这个下右。上左的这个策略来走了,他首先先把这个标识成几,同学们是不是标识成二啊。不是写的有吗?标示二标示二,然后呢,在这个基础上,是不是它往下看了一眼,因为这个怎么看到的是I加一了吗?是不是又在这个递归,那么I加一是不是看到这个点啊。
28:02
这个点是不是它一进来过后,从这产生一个递归,我我这就不好画了啊,它产生递归的话,是不是把这个I传进在这个I就这个是一,这个是零,是不是就是到这来了,到这来是不是他又进到这个map。I及等于零,因为你进去掉递归的时候,这个六五还是不等于二嘛,还是等于零于此呢,他进来过后,他又把这个位置又标成二。是这意思吧,同学们,它标成二以后,标成二以后是不是他又先在这个进来这个点又采取当它到这个这个点的时候,又采取下右上左的策略,就在这个点啊,仍然采取上右下左。啊,下下右上左在这点,他是不是往下一走,他往下一走是不是,诶,他发现这条路。他他到下一次地柜的时候,他是不是走的是。走向往下走,往下走十钟,他发现这条路是走不通的呀,走不通是不是就他就尝试着向右走了,在这个点,因为他回来了,向右走,向右走是不是他发现走通,是不是又标成二在这个点是不是,在这个点是不是又向下走,走不通,但是又在这个点又向右走,是不是又走通了。
29:14
走走通过,他又在这个点又向下走,是不是又走通。是吧,向右下走又走通,向下走又走通,向下走又走通,到这儿走不通,走不通是不是他又向尝试向右走,因为你是。向下走,走不通你就向右走,向右走,你到这儿走通了,走通走到这个点,是不是它又向下走,又走不通,走不通又向右走。是不是到这点到这个地方再回溯的时候,他一看,哦,Map等于六等于六,五等于二了,于是整个就噼里啪啦的就回去。这条路就找到了。看到没有,那么这条线呢,它是一个比较顺畅的线。那么从这里面你们没有看到没有体现到回溯这个观点,说老师我们看到有回溯啊。确实因为我们这个设计的这条线呢,你很幸运。
30:02
他他总是能成功,就是他这个策略下,右上走,从来没有回去再走一遍,那我给大家演示一个回去的这条线,注意听讲啊,我就讲一次,假如这次呢,我狠一点,狠一点怎么样呢,我把。我把这两个点大家看。我把这个格子,把这个格子也标出一个挡板。把它堵死。来看。Map。卖不几呢,同学们看,我把这个地方标成这个是一二,一二和二二。好把一。二。标成一,把MAP2,二也标成一,同学们如果这样我在运行的话,你们看情况就完全不一样了。你看这个时候你会发现他走的这个路呢,诶。大家看他找的这个路跟我们想的就完全不一样。你看这。
31:02
为什么这个地方是两个山呢?这个地方确实产生回溯了。这个地方就产生回溯了,我们来简单的再分析一遍。啊,简单再分析一遍,那这个时候因为时间的关系啊,我就我就快速的给大家分析完就行了,它上来过后呢,仍然是在这个点先标成二。注意啊,这个是个挡板,我我把这个挡板画画画一下。这儿也是个挡板哦。好,他先把这个二标成二,这个没问题,因为它向下走确实走通了,他又接着往下走,是不是往下走,它它在这个地方先上来个标成二,是不是标成二,然后往下走,没有走通往右走。也没有走通,然后向上走,走过了,向这边走也走通,是不是这个时候在这个点发现上下左右都不成,于是他就把这个点回来过后,再把它改成了解。改成三。
32:00
改成三,改成三是不是它就回去了,到哪个位置呢?到原先这个位置,因为你原先这个位置其实是往下走走过来的。也就是说,你刚才为什么能走到下个点,是因为往下走走通了,于是在这个位置,就是在原先第一个这个位置啊,就这个位置,他又尝试着向。又走。向上走,向这边走,是不是都走不通,又把原先这个二制成三。你看这个回溯就在这儿产生的。回溯焦点产生,也就是说如果我们再画的清楚一点的话呢,就是相当于原先这个地方是有一个挡板。然后他上来过后,他先是一个二。走通了,非常幸运,接着又往下走,又走通了,但是在这个位置他发现下走不通。下走不通的话呢,向右右是挡板也走不通,走不通这个时候呢,它假如是我们刚才定的是什么策略啊。是向右。呃,我看看那个刚才是什么,呃,这个时候我们不管他是哪个方向了,不管是向左走还是向上走,是不是是不是都是不OK的,所以他就会把这个。
33:07
改成几呢?改成三。改成三,是不是这个地方就返回,返回到哪里去了,根据这个站的规则,是不是它返回到原先进入到第二一个点的上一节,实际上就是压到下一个站去了,回到这,那么在这个点的时候,它原先是往下走的,现在是不是往右走也走不通,然后向上向右也走不通,最后把这个点也改成三。回溯就在这里发生的,好,同学们时间关系我就讲到这里啊,讲到这里,那大家好好的去理解一下就可以了,那同学们这一个关于小球找路的第一部分的这个方式,我们就给大家先讲到这儿,截取一段视频。
我来说两句