Exercícios-Grafo

30
Exercícios PAA- Grafos Eduardo Laber

description

Exercícios sobre grafosC++AlgoritmoProgramação

Transcript of Exercícios-Grafo

  • Exerccios PAA- GrafosEduardo Laber

  • *Exerccio de Implementao

    1. Modifique o cdigo da BFS para que esta preencha um vetor d com n entradas aonde d(u) a distncia da origem s at o vrtice u.

    for every vertex v of G not explored yetd(v) infinito End For 2 d(s) 03 mark vertex s as visited4 while S is not empty do5 u Dequeue(S); 6 For each v in Adj[u] then 7 if v is unexplored then8 mark vertex v as visited9 d(v) d(u)+1 10 Enqueue(S,v)

  • Cap 3-TardosExerccio 2Modifique o pseudo-cdigo da busca em profundidade da seguinte forma.Ao visitar um vrtice v a partir de uSe v no foi visitado faa upai (v)Se v j foi visitadoSe v pai(u)Ciclo existe (uv+ caminho de u a v na rvore)

  • Cap 3-TardosExercicio 2: Ciclo em grafo direcionado

    Execute uma busca em profundidade no grafo anotando, para cada vrtice v,o pai de v o momento que a busca em v comea: pre(v) o momento que a busca em v termina: pos(v)

    Ao tentar visitar um vrtice v a partir de u tal que a busca em v j comeou mais ainda no terminou (pos(v) =-1) podemos obter um ciclo da seguinte forma. Caminhe pelos pais de u at encontrar v. O ciclo formado por este caminho + o arco (u,v)

  • Cap 3-TardosExerccio 3

    Execute uma ordenao topolgica no Grafo. Se em algum ponto no houver uma fonte, quer dizer que o grafo contm ciclos.

    Execute o algoritmo do slide anterior

  • Cap 3-TardosExerccio 4Etapa 1. Construa o grafo G[S] induzido pelas arestas do conjunto S. Utilize uma DFS(BFS) para determinar as componentes conexas deste grafo. Atribua o nmero da componente para cada vrtice (borboleta). Etapa 2. Faa uma varredura nos pares (i,j) tal que a borboleta i diferente da borboleta j. Se algum par (i, j) for encontrado tal que a borboleta i est na mesma componente de j (conforme etapa 1) ento a atribuio inconsistente. Se nenhum par for encontrado a atribuio consistente.O(m+n)

  • Cap 3-TardosExerccio 7Seja v um n do grafo. Se u no vizinho de v ento existe um n, digamos w, que vizinho de u e de v. Caso contrrio o grafo teria mais de n vrtices (n/2 vizinhos de u, n/2 outros vizinhos de v, u e v). ContradioPortanto, vwu um caminho de v para u

  • Cap 3-TardosExerccio 8Para um contra exemplo considere uma clique K com n- n0.5 e um nico vrtice desta clique ligado a um caminho de n0.5 vrtices.

  • Cap 3-TardosExerccio 9Considerar a rvore gerada a partir de uma busca em largura comeando em s.Como a altura desta rvore maior que n/2 ento existe um nvel nesta rvore ( > 1 e < nvel t) com apenas um n.Como toda aresta de G liga vrtices da mesma camada ou de camadas adjacentes, ao remover este vrtice desconectamos o grafo.

  • Cap 3-TardosExerccio 9AlgoritmoFaa uma busca em largura calculando a distncia de s a cada n e preencha um vetor (de listas) indicando, na posio i, os vrtices que distam i de s. Retorne o primeiro n diferente de s que se encontra sozinho em uma lista

  • Cap 3-TardosExerccio 10Utilizar uma busca em largura para decompor a rvore em camadas. Marcar para cada n u a sua distncia ao n de origem v. Em uma segunda passada acumular em cada n u um contador num(u) indicando o nmero de caminhos de v a u. Inicialmente os contadores so 0, exceto Num(v)=1. Ao tentar visitar um n y, com d(y)=i+1, a partir de um n x, com d(x)=i, fazer num(y) num(y)+num(x)

  • Cap 3-TardosExerccio 12Construa um grafo direcionados G da seguinte formaa) Para cada pessoa P(i) crie dois vrtices: B(i) data de nascimento e D(i), data de morteb) Para todo i, crie uma arco de B(i) para D(i)c) Se nos dados coletados, P(i) morre antes de P(j) nascer crie um arco de D(i) para B(j)d) Se nos dados coletados, a vida de P(i) tem interseo com a vida de P(j), crie um arco de P(i) para B(j) e um arco de B(i) para P(j) Se G tem uma ordenao topolgica os dados so consistentes, caso contrrio no

  • Dasgupta-Cap 3Exerccio 8Criamos 11*8*5=440 ns e associamos cada n do grafo a uma tripla (a,b,c) correspondendo a quantidade de gua em cada um dos recipientes. . Existe uma aresta direcionado de um n para outro se for possivel de um estado alcancar o outro com um movimento.

  • Dasgupta-Cap 3Exerccio 8Cada n pode ter 6 arestas partindo dele, logo o nmero de arestas no mximo 1320

  • Dasgupta-Cap 3Exerccio 8Basta executar uma BFS(DFS) no grafo comeando no estado (0,7,4) e verificar se o estado (0,0,0) e alcanvel

  • Dasgupta-Cap 3Exerccio 9Duas passadas completas na lista de adjacncia do grafoA primeira passada calcula o grau de cada vrticeFor each v in Adj[u]degree(u) degree(u)+1Na segunda, acumulamos em twodegree[u], para cada u, a soma dos graus dos vizinhos de u. For each v in Adj[u]Twodegree[u] Twodegree[u]+d(v)

  • Dasgupta-Cap 3Exerccio 13a) Defina um vrtice s em G e execute uma DFS a partir de s. Seja T a rvore obtida. Qualquer folha de T satisfaz a propriedade desejadab) Qualquer Ciclo direcionadoc) G= dois ciclos disjuntos

  • Dasgupta-Cap 3Exerccio 15Seja G=(V,E) o grafo direcionado em que V o conjunto de intersees de ruas e E representa o conjunto das ruasVerifique se o grafo fortemente conexo utilizando o algoritmo ensinado em sala com complexidade O(m+n)

  • Dasgupta-Cap 3Exerccio 15Seja v o n correspondente a Town Hall. Seja S o conjunto de n alcanveis a partir de v. S pode ser obtido em O(m+n) atravs de uma DFS( BFS).Seja G o grafo reverso de G. Seja T o conjunto de ns obtidos a partir de v em G. Se S for um subconjunto de T ento a propriedade verdadeira. Caso contrrio, falsa. Podemos testar se S e subconjunto de T em O(n)

  • Dasgupta-Cap 3Exerccio 18Execute uma DFS em G a partir de r e armazene os contadores pre e post para cada vrtice do grafo. u ancestral de v se e somente sepre[u]
  • Dasgupta-Cap 3Exerccio 22Execute uma DFS em G e armazene os contadores pre e post para cada vrtice do grafo. Seja v o vrtice com maior post. Sabemos que ele pertence a um source node em G~ (aula de componentes fortemente conexos). Execute uma DFS comeando em v. Se apenas uma rvore for gerada ento existe o n desejado. Caso contrrio, no.

  • Dasgupta-Cap 3Exerccio 24Execute o algoritmo linear para ordenao topolgica. Se em algum ponto o conjunto S dos vrtices com grau de entrada igual a 0 tiver mais de um elemento, ento G no possui o caminho desejado. Caso contrrio, ordem topolgica o caminho desejado.

  • *Exercicio ResolvidoProblema

    Seja um grafo G=(V,E) representando a planta de um edifcio. Inicialmente temos dois robos localizados em dois vrtices de V, a e b, que devem alcanar os vrtices c e d de V.

    A cada passo um dos robos deve caminhar para um vrtice adjacente ao vrtice que ele se encontra no momento.

    Exiba um algoritmo polinomial que decida se possvel, ou no, os robos partirem de a e b e chegarem em c e d, respectivamente, sem que em nenhum momento eles estejam a distncia menor do que r, onde r um inteiro dado.

  • *Exercicio ResolvidoSoluoSeja H um grafo representando as configuraes possveis (posies dos robos) do problema. Cada n de H corresponde a um par ordenado de vrtices de V cuja distncia menor ou igual a r. Um par de ns u e v de H tem uma aresta se e somente em um passo possvel alcanar a configurao v a partir da configurao u em um nico passo, ou seja, se u=(u1,u2) e v=(v1,v2) ento uma das alternativas vlida(i) u1=v1 e (u2,v2) pertence a E (i) u2=v2 e (u1,v1) pertence a E

    O problema portanto consiste em decidir se existe um camnho entre o n (a,b) e o n (c,d) em H. Isso requer tempo linear no tamanho de H. Como H tem O(n2) vrtices e O(n3) arestas, o algoritmo executa em O(n3) .

  • Dasgupta, Cap 4 -Exerccio 11Execute Dijkstra a partir de cada vrtice v. O(|V|3) Guarde em uma tabela Dist a menor distncia Dist(u,v) entre u e v para cada para u,vProcure na tabela Dist o par de vrtices u,v que minimiza Dist(u,v)+Dist(v,u). Se o mnimo infinito ento o grafo acclicoO(|V|3), j que temos que considerar todos os pares

  • Dasgupta, Cap 4 -Exerccio 12Seja e=(u,v) Remova a aresta e de GO(|V|) Execute Dijkstra para encontrar o caminho P de custo mnimo entre v e u em G-e. O(|V|2), utilizando vetor como fila de prioridadesO ciclo dado pela unio de P com e.

  • Dasgupta, Cap 4 -Exerccio 141. Execute Dijkstra para encontrar o caminho de custo mnimo entre v0 e os demais vertices em G 2. Execute Dijkstra para encontrar o caminho de custo mnimo entre v0 e os demais vertices em GR (grafo reverso)3. O caminho mnimo entre u e w passando por vo o caminho mnimo entre u e v0 e vo e w

  • Dasgupta, Cap 4 -Exerccio 17.aUtilize um vetor de nW posies como fila de prioridade.A posio i do vetor deve guardar os ns v tal que o custo (v) do menor caminho da origem s at v i.

  • Dasgupta, Cap 4 -Exerccio 17.aPortanto, encontrar o custo total de encontrar o vrtice com menor valor () requer O(nW) operaesSe o ultimo vrtice colocado em S foi u ento a busca pelo menor valor de () deve ser feita a partir de (u).As atualizaes podem ser feitas em O(E)

  • ESTUDEM

    *****b ****************Alternative. Order nodes in reverse order that DFS finishes visiting them.

    Alternative. Order nodes in reverse order that DFS finishes visiting them.

    *****