Codigo Civil Artigo 1088

Hunter College - Bom pessoal, hoje vamos ver como implementar nosso grafo em linguagem C Na ultima aula a gente viu que íamos trabalhar com um TAD, então vamos definir a TAD grafo Dois arquivos, grafo.h onde a gente vai criar só o tipo que vai ser usados na aplicação principal na forma de ponteiro Então tipo Grafo, no meu programa principal Grafo* gr por exemplo No arquivo grafo.c a gente vai definir realmente como é esse grafo, a gente vai trabalhar com uma lista de adjacência, uma lista simplificada Aqui eu estou criando a minha struct grafo, eu vou ter uma informação se ele é ponderado ou não, o número de vértices que ele tem Na hora que eu criar, eu preciso definir por exemplo esse grafo vai ter 50 vértices, isso não vai poder ser alterado por questão de simplificação Grau máximo que eu vou ter para cada vértice, eu criei meu grafo por exemplo e cada vértice pode ter no máximo 20 ligações Eu estou limitando a representação por uma lista de adjacência, mas uma lista estática, ela vai ter esse tamanho máximo Estou criando um int** arestas que eu vou guardar as minhas conexões, então vai ser uma matriz que eu vou alocar dinamicamente, 2 ponteiros A primeira linha representa os vértices e dentro de cada linha representa quantas conexões ele tem Outra matriz peso, caso eu queira trabalhar com um grafo ponderado e um int* grau que vai ser um vetor de grau, ou seja Eu sei que grau max é quantas arestas eu posso ter para um vértice, e aqui tá a minha lista de arestas e aqui eu vou definir para cada vértice quantas arestas ele possui se a gente pensar lá na parte de listas, é como se eu tivesse aquele campo quantidade, você tem um vetor de um tamanho MAX E o quantidade diz quantos já foram inseridos e qual a próxima posição vaga para eu inserir uma nova aresta Vamos ver como criar esse grafo. Criando um grafo eu vou definir essa função aqui, cria_grafo, que me retorna um grafo e vou passar o número de vértices O grau máximo que cada vértice pode ter e se vai ser um gráfico ponderado ou não, então a chamada dessa função seria algo assim Estou criando um grafo com 10 vértices, ele pode ter até 7 arestas ligando cada vértice e ele não é ponderado A função começa alocando a minha estrutura grafo, dentro de um novo ponteiro, se isso não ouve erro nessa alocação Eu esou pegando os parâmetros, número de vértice e guardando na minha estrutura Grau máximo e guardando, se é ponderado eu fiz apenas uma verificação para garantir se o valor é sempre 0 e 1 Guardando a informação do tipo verdadeiro ou falso, e aqui estou criando o meu vetor de grau, número de vértices e sizeof int Estou usando a função calloc porque estou entrando zerado, ou seja, inicialmente cada vértice tem grau zero (nenhuma aresta) Aqui estou criando a matriz de arestas, então um malloc alocando o número de vértices int* e para cada vértice estou criando o grau máximo dele Ou seja, quantas arestas ele vai poder ter, o que eu fiz foi criar um vetor e para cada vetor criei um novo vetor Eu tenho como se fosse uma lista de adjacências realmente, percebam que eu tirei as verificações se deu certo ou não a alocação Para economizar espaço, se o meu gráfico for ponderado, estou fazendo a mesma coisa para a matriz de peso, então estou criando outra matriz Outra lista de adjacência por assim dizer aonde cada posição vai armazenar o peso, então aqui eu armazeno estou conectado ao vértice 5 Aqui eu armazeno o peso, 10 por exemplo, se existir essa informação, por fim retorno o gráfico criado Eu tenho um esquema de matriz ali dentro que vai ser a minha lista de adjacência, assim que eu crio o meu grafo Vou liberar esse grafo, então beleza, eu criei o grafo aqui então tenho que liberar ele, vamos passar a informação do grafo para liberá-lo Basicamente é liberar as estruturas que eu aloquei, tudo que foi feito malloc e calloc no código de criação eu tenho que liberar aqui Então, estou liberando a minha matriz de arestas, ou seja, cada uma daquelas listas que eu criei aqui eu elimino elas Por fim eu elimino o vetor dos vértices, se for ponderado a mesma coisa, elimina a lista de adjacência e o vetor de vértices Elimina o vetor de grau e aquela primeira alocação da estrutura do grafo, é bem simples a maneira que libera Simplesmente tirar a memória que estava associada aquelas estruturas internas Criei o grafo e destruí o grafo, se eu criei o grafo eu quero agora inserir uma aresta, dentro desse grafo quero colocar uma aresta Ligando o vértice 0 ao vértice 1, estou informando se isso é um dígrafo ou não, ou seja, se tem orientação ou não das arestas Não é um dígrafo, ou seja, se eu conectar esse vértice a esse ele conecta a origem ao destino e o destino a origem Se eu disser que ele é dígrafo ele só cria uma conexão da origem ao destino e um peso Ele vai verificar se usa essa informação dentro da função Como é que fica? Primeiro eu tenho que verificar se o meu grafo é valido ou não, se não é valido retorna 0 Tenho que verificar se a origem e o destino são vértices vagos, eu tenho um vetor, então não pode ser menor que zero E não pode ser maior que o meu número de vértices, verifico se esse vértice existe dentro do meu grafo Eu não posso criar um grafo com 50 vértices e tentar ligar o vértice 100 ao 200, então estou fazendo só uma verificação Sei que a origem e destino existem e que o grafo existe, então arestas de origem, a linha origem, ou seja, o vértice inicial Eu vou acrescentar o destino no grau máximo dele, o destino vai ser colocado na posição da matriz, vou colocar nessa posição Que é definida pelo meu vetor de graus o vértice destino, se for ponderado eu faço a mesma coisa para o peso E no final eu somo mais um no grau desse vértice origem, só lembrando a questão da lista estática Você tem uma lista estática, temos um vetor e um campo quantidade que diz onde está vago na lista para você inserir Vamos lembrar que grau começa em 0, ou seja, eu tenho 0 elementos na minha lista, eu coloquei na posição 0 Depois coloquei mais 1, ele aponta para a posição 1, por que tem um elemento na posição 0, se aponta para a posição 2 É porque tem um elemento na posição 0 e 1, é por isso que eu coloco na posição do grau e depois eu incremento o grau Faltou lidar com a informação se é um dígrafo ou não, ou seja, se ele não for dígrafo, o que eu tenho que fazer? Se A liga B, o vértice B tem que ligar o vértice A, então eu chamo a função insere aresta passando destino e origem agora E não mais origem destino, simplesmente chamo a função de novo recursivamente mas passando a ordem inversa dos parâmetros E agora eu digo que isso é dígrafo, porque eu não quero que isso fique recursivamente sendo executado Eu quero executar apenas mais uma vez, se antes eu criei de origem para destino e chamei destino para origem Eu vou chamar de destino para origem e não faço mais nada, eu simplesmente insiro aquela aresta e termino E por fim retorna 1 para dizer que deu tudo certo na inserção, bastante simples inserir uma aresta Por fim a gente tem a remoção de uma aresta, inseri uma aresta, outra e quero remover uma agora Aresta ligando o vértice 0 no 1, e informando de novo se é dígrafo, se não for dígrafo tem que remover de 0 pra 1 e de 1 pra 0 Verificar se o grafo é valido, se a origem e o destino existem, se são vértices validos, tem que procurar em aresta Vou procurar dentro da quantidade de arestas que tenho naquele vértice origem, se existe na posição i Se a i-ésima aresta dele é igual a destino, enquanto for diferente eu vou avançando nas minhas arestas, se em algum momento Eu sair do meu laço e i for igual ao grau, essa aresta não existe e retorna 0, parei por aqui Se eu não executei esse return então a aresta existe, então eu diminuo a quantidade de graus do meu vértice origem Eu estou eliminando uma aresta dele, se ele tinha grau 5 ele tinha 5 arestas, então diminui uma, fica 4 arestas E na posição i estou colocando a última aresta, isso é uma otimização na ideia de remoção Exemplo: eu quero remover o primeiro elemento, mas tenho mais três elementos na minha lista Ao invés de eu pegar e remover o x e deslocar todo mundo uma posição para trás eu removo o x pego o último elemento e jogo pra cá Eu não tenho que ficar deslocando um monte de elemento, eu desloco apenas um, isso que foi feito aqui Pegou o elemento da última posição e colocou na posição i, se for ponderado eu tenho a matriz de pesos Faço a mesma coisa e por fim verifico se o gráfico é um dígrafo, não é dígrafo, então tenho arestas conectando de A para B e B para A Chamo a função remove aresta invertendo origem e destino e dizendo agora que ele é um dígrafo, vai executar isso apenas mais uma vez Para não ficar preso dentro do loop da remoção, é um pouco mais trabalhoso a etapa de remover porque você tem uma busca pela aresta Não tenho igual na inserção um acesso direto, preciso procurar quem vai ser removido Bom pessoal, criação de grafo era isso, nas próximas vamos ver um pouco sobre buscas, que são tarefas importantes em grafo Até lá.

Codigo civil artigo 1088 temas para monografia de arte Nova Friburgo seguranca da informacao artigos. Valinhos a liberdade de expressao e a midia Plano de negócios, musica infantil para ninos de un ano Crítica Literária/Filme, curso de gestao empresarial e controladoria Crítica Literária/Filme, cfc exames Relatório de Laboratório. Abreviaturas de exames laboratoriais curso pre federal bh codigo civil artigo 1088 Erechim roubo a banco policia federal. Suspensao condicional do processo faculdade ministerio publico Plano de negócios Cariacica cursos de extensao marketing rj, revisao auxilio doenca art 29.

Campo Largo:

Betty Sheppard, Washington: School of Drama. Natal: Guttman Community College, Midtown Manhattan; 2011.

Vivienne Fischer, Oneida. Santa Cruz do Sul: Jewish Theological Seminary of America, Morningside Heights (Columbia University area); 2012.

Krystal Murphy, Mount Morris Park W zip 10027. Bahia: Canisius College; 2020.

inserted by FC2 system