public void populandoMatriz(int x, int y) { matriz = new List <NoVM>();//Todo clique do botão cria uma nova Matriz for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { NoVM noAux = new NoVM() { posicaoLinha = i, posicaoColuna = j, valor = gerarValorAleatorioBit(), }; //Vizinho Esquerdo if ((j - 1) >= 0 && existeVizinho(i, (j - 1))) { noAux.vizinhoEsquerdo = matriz.FirstOrDefault(es => es.posicaoLinha == i && es.posicaoColuna == (j - 1)); matriz.FirstOrDefault(es => es.posicaoLinha == i && es.posicaoColuna == (j - 1)).vizinhoDireito = noAux; } //Vizinho Superior if ((i - 1) >= 0 && existeVizinho((i - 1), j)) { noAux.vizinhoSuperior = matriz.FirstOrDefault(es => es.posicaoLinha == (i - 1) && es.posicaoColuna == j); matriz.FirstOrDefault(es => es.posicaoLinha == (i - 1) && es.posicaoColuna == j).vizinhoInferior = noAux; } matriz.Add(noAux); //Add o Objeto Nó na lista de buffer. } } }
public List <NoVM> calculaPercurso(List <NoVM> caminhoAt, NoVM noz) { //Valida a primeira chamada. if (caminhoAt == null) { caminhoAt = this.caminhoAtual; noz = new NoVM() { posicaoColuna = caminhoAtual[0].posicaoColuna, posicaoLinha = caminhoAtual[0].posicaoLinha, valor = caminhoAtual[0].valor, vizinhoDireito = caminhoAtual[0].vizinhoDireito, vizinhoEsquerdo = caminhoAtual[0].vizinhoEsquerdo, vizinhoInferior = caminhoAtual[0].vizinhoInferior, vizinhoSuperior = caminhoAtual[0].vizinhoSuperior }; } else { caminhoAt.Add(noz); } //Todos Os Percursos Percursos perc = new Percursos(); foreach (var itemNo in caminhoAt) { perc.percursoValido.Add(new NoVM() { posicaoColuna = itemNo.posicaoColuna, posicaoLinha = itemNo.posicaoLinha, valor = itemNo.valor, vizinhoDireito = itemNo.vizinhoDireito, vizinhoEsquerdo = itemNo.vizinhoEsquerdo, vizinhoInferior = itemNo.vizinhoInferior, vizinhoSuperior = itemNo.vizinhoSuperior }); } todoosPercursos.Add(perc); //ADD Todos os Percursos percorridos if (noz.posicaoLinha == linF && noz.posicaoColuna == colF)//se coluna e linha do nó for igual ao desejado. { caminhoAtual = caminhoAt; Percursos per = new Percursos(); foreach (var itemNo in caminhoAt) { per.percursoValido.Add(new NoVM() { posicaoColuna = itemNo.posicaoColuna, posicaoLinha = itemNo.posicaoLinha, valor = itemNo.valor, vizinhoDireito = itemNo.vizinhoDireito, vizinhoEsquerdo = itemNo.vizinhoEsquerdo, vizinhoInferior = itemNo.vizinhoInferior, vizinhoSuperior = itemNo.vizinhoSuperior }); } percursoSucesso.Add(per); //ADD PERCURSOS VALIDOS caminhoAt.Remove(noz); return(caminhoAt); } if (noz.vizinhoDireito != null && noz.vizinhoDireito.valor == 1 && !(caminhoAt.Exists(el => el == noz.vizinhoDireito))) // Busca Vizinho Direita { caminhoAt = calculaPercurso(caminhoAt, noz.vizinhoDireito); } if (noz.vizinhoEsquerdo != null && noz.vizinhoEsquerdo.valor == 1 && !(caminhoAt.Exists(el => el == noz.vizinhoEsquerdo))) // Busca Vizinho Esquedo { caminhoAt = calculaPercurso(caminhoAt, noz.vizinhoEsquerdo); } if (noz.vizinhoSuperior != null && noz.vizinhoSuperior.valor == 1 && !(caminhoAt.Exists(el => el == noz.vizinhoSuperior))) // Busca Vizinho Superior { caminhoAt = calculaPercurso(caminhoAt, noz.vizinhoSuperior); } if (noz.vizinhoInferior != null && noz.vizinhoInferior.valor == 1 && !(caminhoAt.Exists(el => el == noz.vizinhoInferior))) // Busca Vizinho Inferior { caminhoAt = calculaPercurso(caminhoAt, noz.vizinhoInferior); } caminhoAt.Remove(noz); return(caminhoAt); }
public void setPontoDePartida(int x, int y) { NoVM ponto = matriz.FirstOrDefault(ex => ex.posicaoLinha == x && ex.posicaoColuna == y); caminhoAtual.Add(ponto); }