1.最小生成树普利姆算法
①对于一个带权联通图,从图中任意某一点v开始,在所有与v的相邻边中找到权值最小的一条边,将这条边加入到已找到边的集合,并且将与这条边相连的另一个点w加入到最小生成树中;
②然后继续从已找到的点v和w的所有相邻边中找出权值最小的边,并把改这条边加入到已找到边的集合,将与这条边相连的另一个点加入到最小生成树;
③重复上述操作,直到遍历完所有的点。注意不可形成回路!也就是所有的点只能访问一次!
2.迷宫生成遍历墙算法思想
①一开始,所有的网格的所有墙都保留;
②随机选择一个网格,将这个网格加入到遍历过的网格列表里,每个网格仅遍历一遍。然后将这个网格的四面墙加入到候选墙列表中;
③在候选墙列表中随机选取一面墙x,根据这面墙分割的两个网格A,B,进行如下判断:
如果这两个网格仅有一个A在遍历过的网格列表中,那就移出这面墙x(值变为1),同时把x移出候选墙列表,并把另一个网格B加入到遍历过的网格列表,再把网格B周围值为0的墙添加到候选墙列表;
如果A,B都在遍历过的网格列表里,则保留它们之间的墙x,并在候选墙列表中删除x。
④重复上面过程,直到候选墙的列表为空。
3.迷宫生成遍历网格思想
与遍历墙类似,相当于把墙增宽到与网格同宽,因此可采用(2A+1)*(2B+1)的二维数组形式来描述迷宫。用1代表墙,0代表路。
①首先把所有网格都视为墙,也就是二维数组所有元素初始值为1;
②将行、列索引都是奇数(也就是原本为路的网格)中随意选择一个网格,并将其周围原本是路(索引差为2)的网格加入到候选网格列表中;
③在候选网格中,随机选取一个网格x,然后对x周围原本为路的网格进行判断:
如果x周围原本为路的网格中有值为0的网格y,并且与x与y之间的墙也变为了路(0),那就直接把网格y变为0,然后把y周围原本是路的并不在候选列表中的网格加入到候选网格列表;
如果x周围的网格有值为0的网格z,但x与z之间的墙还是墙(1),那就把z和墙的值都变为0,然后把z周围原本是路的并不在候选列表中的网格加入到候选网格列表;注意若有多个符合条件的网格,随机选择其中一个打通!!
④重复上述步骤,直到候选列表为空。
4.实现代码,输入一个全0二维数组,返回生成的01数组。
注意:0代表墙1代表路