public void PilhaMovimentos(DataGridView dgv) //método principal da classe. Testa todos os movimentos e chama os demais métodos quando necessário. { var pilha = new PilhaLista <Movimentos>(); pilha.Empilhar(new Movimentos(1, 1)); int linhaAtual = 1, colunaAtual = 1; bool temCaminhoPossivel = true; int[] movLinhas = { -1, -1, 0, 1, 1, 1, 0, -1 }; int[] movColunas = { 0, 1, 1, 1, 0, -1, -1, -1 }; while (temCaminhoPossivel) { bool seMoveu = false; for (int i = 0; i < movLinhas.Length; i++) { int proximaLinha = linhaAtual + movLinhas[i]; int proximaColuna = colunaAtual + movColunas[i]; if (PosicaoEstaVazia(proximaLinha, proximaColuna)) { Avançar(pilha, proximaLinha, proximaColuna, ref linhaAtual, ref colunaAtual, ref seMoveu, dgv); } else if (chegou(proximaLinha, proximaColuna)) { pilha.Empilhar(new Movimentos(proximaLinha, proximaColuna)); caminhosEncontrados.Add(pilha.Clone()); pilha.Desempilhar(); } } if (seMoveu == false) { pilha.Desempilhar(); if (pilha.EstaVazia) { temCaminhoPossivel = false; } else { Voltar(pilha, ref linhaAtual, ref colunaAtual, dgv); } } } }
private void dgvCaminhos_CellClick(object sender, DataGridViewCellEventArgs e) { for (int linha = 0; linha < dgvLabirinto.RowCount; linha++) { for (int coluna = 0; coluna < dgvLabirinto.ColumnCount; coluna++) { dgvLabirinto.Rows[linha].Cells[coluna].Style.BackColor = Color.White; } } PilhaLista <Caminho> pilhaOriginal = osCaminhos[dgvCaminhos.CurrentCell.RowIndex]; PilhaLista <Caminho> pilhaCaminhosClone = pilhaOriginal.Clone(); while (!pilhaCaminhosClone.EstaVazia) { Caminho caminhoSelecionado = pilhaCaminhosClone.Desempilhar(); dgvLabirinto.Rows[caminhoSelecionado.Linha].Cells[caminhoSelecionado.Coluna].Style.BackColor = Color.LightBlue; } }