Método GetNode()

Esse método tem como objetivo retornar ao usuário o peso de nó escolhido. Para isso é necessário passar como parâmetro ao método o índice do nó desejado.
Por padrão, quando não tiver sido inserido um valor de peso ao nó o valor retornado será 0.


4: Verifica se o índice passado por parâmetro é menor do que o número total de nós.
5: Caso o valor do índice seja menor que a quantidade de nós então o valor do peso do nó desejado será retornado ao usuário.7: Caso o valor do índice seja maior que a quantidade total de nós então uma mensagem é enviada ao usuário falando que a posição solicitada é inválida.

Método SetPesoNode()

Esse método tem o objetivo de inserir valores de peso para os nós do grafo.
Esse método tem duas variações na forma de passar parâmetro.
A primeira, pede como parâmetro o índice do nó e o valor do peso desejado, já a segunda forma pede somente o índice do nó.
As duas formas serão apresentadas a seguir, começando pelo método que passa os dois parâmetros e em seguida pelo método que só pede o índice do nó.


4: Verifica se o índice passado por parâmetro é menor do que o número total de nós.
5: Caso o valor do índice seja menor que a quantidade de nós então o valor do peso passado por parâmetro é adicionado na array de Peso dos Nós no índice correspondente ao nó desejado pelo usuário.
7: Caso o valor do índice seja maior que a quantidade total de nós então uma mensagem é enviada ao usuário falando que a posição solicitada é inválida.


5: Chama o método SetPesoNode que tem dois parâmetros, passando o índice do nó que foi recebido como parâmetro e o valor 1 para o peso do nó.
Esse valor foi padronizado para quando um valor de nó não é passado por parâmetro.

Método GetAresta()

Esse método tem como objetivo retornar ao usuário o peso de uma aresta escolhida. Para isso é necessário passar como parâmetro ao método o nó de partida e de destino da aresta desejada.
Por padrão, quando a aresta dos dois pontos passados por um usuário não existir o valor retornado será 0.



4: Verifica se os nós de origem ou de destino são menores que a quantidade total de nós do grafo.
5: Caso os nós de origem e de destino sejam menores então o método retorna a matriz na posição de origem e destino para o usuário. O valor guardado na matriz é o peso da aresta em questão.
7: Caso o nó de origem ou de destino for maior que a quantidade total de Nós então uma mensagem é enviada ao usuário falando que a posição solicitada é inválida.

Método ShowMemory()

Esse método tem a finalidade de calcular e imprimir a quantidade de memória gastapela classe de grafos quando utiliza a tecnica de matrizes de adjacência e delistas de adjacências.Julgo que o calculo de memória utilizada para matrizes seja mais simples do quelistas, portanto é por ela (Matriz adjacênte) que começaremos.
Bom, na matriz guardamos valores inteiros que ocupa 4Bytes de espaço de memória.Se já sabemos quanto cada espaço alocado de memória tem separadamente, entãoprecisamos descobrir quantos espaços reservamos para contruir a matriz.
Mas como descobrir isso?
Isso é simples, pois o usuário entra com a quantidade de nós que ele deseja, e amatriz adjacênte, é uma matriz quadrada do valor total de nós, ou seja tem aquantidade de nós de linha e coluna.Por exemplo:
O usuário diz que o objeto de grafos instanciado por ele terá cinco nóslogo nossa matriz tem cinco linhas e cinco colunas.
Sendo assim, elevamos a quantidade de nós ao quadrado para saber a quantidade deíndices da matriz. Após isso pegamos o resultado adquirido e multiplicamos por 4que é a quantidade de bytes ocupados por uma variável do tipo inteiro.




4: Múltipicla 4 (valor de Bytes reservados da memória para uma variável do tipo inteiro) pela quantidades de nós do grafo elevado ao quadrado.

5-8: Impressão da informação calculada.

Método SetAresta()

Esse método tem como objetivo criar a aresta entre dois pontos que são definidos pelo usuário via parâmetros.
Nesse método conseguimos incluir também o valor de peso da aresta e dizer se ela é uma aresta dirigida ou não.
Existem três variações de possibilidade de entrada de parâmetros nesse método. A imagem mostrada a baixo é o método com quantidade máxima de parâmetros que se pode passar.
As outras duas variações serão mostradas logo após a explicação de cada linha do método.

Vale ressaltar que, se o valor do parâmetro de direção for 0, então a aresta é não dirigida e se o valor do parâmetro for 1 então a aresta é dirigida.






58: Condição para verificar se os parâmetros passados pelo usuário de nó de origem e nó de destino são valores menores que o tamanho do atributo Nos.
Essa verificação tem de ser feita, porque se, por exemplo, tentarmos acessar o índice 5 de um vetor que só tem 3 posições o programa irá dar erro por tentar acessar um índice que não existe.
60: Caso os valores dos pontos de inicio e fim forem menor que o atributo Nos, então é verificado se o parâmetro direcao (que verifica se a aresta é ou não dirigida) recebeu o valor 0 ou 1.
61: Caso a condição for verdadeira então a Matriz recebe o peso da aresta passado por parâmetro na posição (também passada por parâmetro) do ptoOrigem e ptoDestino.
62: Caso a condição da linha 11 for falsa então é verificado se o valor passado por parâmetro para direção é igual a 0
64-65: Se essa condição for verdadeira então a Matriz recebe o peso nos dois sentidos.

Agora muitos devem estar se perguntando o que é esses dois sentidos mencionados acima.
Bom, vamos tentar explicar:
Vamos supor que uma aresta de peso 5 irá ser criada. É passado como parâmetro também o ponto inicial (definido pelo parâmetro ptoOrigem) 7 e ponto de destino (definido pelo parâmetro ptoDestino) 10.
Se o grafo não for dirigido (direcao = 0) então o grafo não tem direção, ou seja, não tem ponto inicial ou final.
Sendo assim, o ponto definido como ponto de origem é na verdade o ponto inicial e também o final, ou seja, essa aresta pode ir do ponto 7 até 10 ou do ponto 10 até 7.


67: Caso as condições das linhas 60 e 62 forem falsas então uma mensagem de erro é enviada ao usuário.


Agora serão mostradas as outras formas de chamar o método SetAresta que só varia pelo número de parâmetros passados.





No primeiro método que vai da linha 78 até a linha 81 o parâmetro de peso da aresta não é passado, portanto, por padronização chamamos o método apresentado anteriormente do SetAresta passando o valor do peso como 1.

Já no segundo método apresentado que vai da linha 85 até a linha 88, os valores de peso da aresta e direcao não são setados. Portanto, por padronização passamos os valores, tanto de peso, quanto de direção da aresta, valendo 1.

Método GerarGrafo()


Esse método tem por objetivo dimensionar os valores para o grafo que será gerado.
Esse método recebe o tamanho passado como parâmetro e a partir disso gera o vetor de peso dos nós, a matriz de adjacência.
Vale ressaltar que esse método não é acessível aos usuários.
O usuário, quando instancia o objeto grafo, passa o valor do tamanho o grafo e então o construtor do objeto chama essa função para realizar todos os dimensionamentos.



36: Condição que verifica se o tamanho passado como parâmetro para o método é maior que zero.
38: Se o valor de tam for maior que zero então o atributo Nos receberá o valor passado por parâmetro.
39: É criado o vetor para peso de acordo com o tamanho do grafo passado por parâmetro.
40: É criado o vetor inicial da matriz de acordo com o tamanho passado por parâmetro.

Tanto no caso da Matriz quanto o Peso, o tamanho passado por parâmetro refere-se à quantidade de posições que eles terão.
Por exemplo, se o tamanho passado for 3, então peso será um vetor com três posições (vai de 0 a 2).
No caso da matriz esse primeiro vetor serve como um local onde guarda o endereço de memória das linhas que serão guardados os registros.
42-43: Laço que cria a quantidade de linhas da matriz de acordo com o valor entrado.
47-49: Se a condição da linha 3 for falsa então os atributos Nos, Peso e Matriz receberão NULL como valor.

Classe de Grafos

Inicialmente apresentaremos a estrutura que a classe grafo está tomando nesse começo de desenvolvimento.
Por problemas de entendimento de como a classe seria desenvolvida, tivemos de mudar muitas coisas nela, mas agora ela está corrigida.

Abaixo serão apresentados os atributos iniciais da classe e os protótipos dos métodos criados até então.





8: Private (Área Privada) - Todos os métodos, variáveis e objetos que são criados nessa área só podem ser acessados, ou ter seus valores alterados dentro da própria classe.
9: Declaração do atributo que define a quantidade de nós que o grafo irá ter.
10: Declaração do atributo (em forma de vetor) que define o peso dos nós.
11: Declaração do atributo (em forma de matriz) que define as arestas do grafo.
13: Protótipo do método GerarGrafo.
14: Public (Área Pública) - Todos os métodos, variáveis e objetos que são criados nessa área podem ser acessados, ou ter seus valores alterados de qualquer outra classe que faça referência a essa.
15: Construtor da classe onde não é necessário que passe parâmetro.
17: Chama o método GerarGrafo, passando o valor 0 como parâmetro. No próximo post esse método (e outros) serão explicados.
19: Construtor da classe onde o usuário entra com o valor de parâmetro.
21: Chama o método GerarGrafo, passando o valor que o usuário passou como parâmetro. No próximo post esse método (e outros) serão explicados.
24-30: Protótipo dos métodos da classe.