IEnumerator GeraBuscaEmProfundidade() { /* * Make the initial cell the current cell and mark it as visited * While there are unvisited cells * If the current cell has any neighbours which have not been visited * Choose randomly one of the unvisited neighbours * Push the current cell to the stack * Remove the wall between the current cell and the chosen cell * Make the chosen cell the current cell and mark it as visited * Else if stack is not empty * Pop a cell from the stack * Make it the current cell */ btnPausa.interactable = true; //btnLimpa.interactable = false; raiz.visitada = true; Celula atual = raiz; //System.Random r = new System.Random(); setAtualDesceDFS(ref atual, raiz); while (atual.pai != null || atual.TemVizinhosNaoVisitados()) { if (atual.TemVizinhosNaoVisitados()) { List <Celula> naoVisitados = atual.getVizinhosNaoVisitados(); Celula vizinhoAleatorio = naoVisitados[r.Next(naoVisitados.Count)]; vizinhoAleatorio.pai = atual; atual.filhos.Add(vizinhoAleatorio); atual.removeParedesEntre(vizinhoAleatorio); setAtualDesceDFS(ref atual, vizinhoAleatorio); // desce na construção da árvore. A única diferença com Sobe é a cor que pinta } else if (atual.pai != null) { setAtualSobeDFS(ref atual, atual.pai); //sempre que sobe na árvore, pinta o antigo de Branco, e ele nunca mais é visitado } if (!instantaneo) { yield return(new WaitForSeconds(velocidade)); } } Transform fundo = atual.gameObject.transform.GetChild(1); fundo.gameObject.GetComponent <MeshRenderer>().material.color = Color.white; btnPausa.interactable = false; //btnLimpa.interactable = true; yield return(null); }