コード例 #1
0
        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);
                    }
                }
            }
        }
コード例 #2
0
        public void MostrarMovimentos(DataGridView dgv) //mostra a lista de pilhas de caminhos no dataGridView da direita
        {
            ajustarDgv(dgv);
            int linhaDgv = 0;

            foreach (PilhaLista <Movimentos> caminho in caminhosEncontrados)
            {
                PilhaLista <Movimentos> caminhoClonado = caminho.Clone();
                int t = caminhoClonado.Tamanho;
                for (int i = t - 1; i >= 0; i--)
                {
                    Movimentos mov = caminhoClonado.Desempilhar();
                    dgv.Rows[linhaDgv].Cells[i].Value = mov.Linha + " " + mov.Coluna;
                }
                linhaDgv++;
            }
        }
コード例 #3
0
        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;
            }
        }