DFS是被广泛运用的搜索算法,它属于一种盲目搜索,定义如下:
1、起始访问的顶点是指定的;
2、若当前访问的顶点的邻接顶点有未被访问的,则任选一个访问;反之,退回到最近访问过的顶点;直到与起始顶点相通的全部顶点都访问完毕;
3、若此时图中尚有顶点未被访问,则再选其中一个顶点作为起始顶点并访问之,转 2; 反之,遍历结束。
大多数时候我们用dfs时会采用递归的方式,但是非递归的方式更加直观,思路更清晰,更便于我们去理解”深度“的思想。这篇文章主要介绍如何用unity引擎来可视化模拟非递归的dfs算法。为了方便理解,给出一个经典的红黑格题目,要求如下:
有一个长方形的房间,房间里的地面上布满了正方形的瓷砖,瓷砖要么是红色的,要么是黑色的。一个人站在其中一块黑色的瓷砖上,他可以向四周的瓷砖上移动,但是不能移动到红色的瓷砖上,只能在黑色的瓷砖上移动,用深度优先搜索的思想模拟该过程。
输入数据有三个,分别是房间的长和宽,以及一个字符串。字符串含有房间中砖块的颜色信息,例如“#”表示黑色瓷砖,“*”表示红色瓷砖,“@”表示该位置的黑色瓷砖,那么字符串可以是
"***#**######@#***##**#***##***#***#****##*###*#**"
(注意,长和宽的乘积应该和字符串字符数相同。)
脚本代码如下(c#):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading;
using System;
using UnityEditor;
public class NewBehaviourScript : MonoBehaviour
{
public GameObject redcube, blackcube, yellowcube, origncube, Ethan;
public string