Vous êtes sur la page 1sur 4

#include "proj1.

h" int main(int argc, char** argv){ int int int int nvertices, narestas, origem, destino; matriz[100][3]; tab[4][110]; k = 0;

scanf("%d %d", &origem, &destino); scanf("%d", &nvertices); scanf("%d", &narestas); /*organizar a matriz do grafo*/ do{ scanf("%d %d %d", &(matriz[k][0]), &(matriz[k][1]), &(matriz[k][2])); k++; }while(k < narestas); /*organizar a tabela auxiliar*/ k = 0; for(k = 0; k < narestas; k++){ tab[0][k] = k;/*vertice, indice*/ tab[1][k] = INF;/*custo, indice*/ tab[2][k] = 0;/*bloqueado(0 no/ 1 sim), indice*/ tab[3][k] = 0;/*vertice anterior, indice*/ } tab[1][origem] = 0;/*origem a zero*/ /*define os parametros de inicio da busca*/ tab[1][origem] = 0;/*define o custo inicial a zero*/ tab[3][origem] = 0;/*o precedente da origem a origem*/ dijkstra(matriz, destino, origem, nvertices, narestas, tab); return 0; }[\code] proj1.c <div class="brush: bash; gutter: false; toolbar: false; class-name: forumCode;" id="forumCodeDiv" iscode="true"> #include "proj1.h" void dijkstra(int matriz[100][3], int destino, int origem, int nvertices, int na restas, int tab[4][110]) { int i, j; int t, p; int caminho[100]; int prox = 0, min = INF, destino_aresta = 0; for(t = 0; t < nvertices ; t++){ min=INF; for(i = 0; i < nvertices; i++){ if((tab[1][i] < min) && (tab[2][i] == 0)){ prox = tab[0][i];/*prximo n, precedncia da origem a origem*/ min = tab[1][i];/*novo mnimo*/ } }

tab[2][prox]=1;/*bloquear vrtices (linha2)*/ j=0; while(j < narestas){ if(matriz[j][0] == prox){ destino_aresta = matriz[j][1]; if(min + matriz[j][2] < tab[1][destino_aresta]){/*compara o novo mnim o com o valor da tabela*/ tab[1][destino_aresta] = min + matriz[j][2];/*actualiza o custo a t ao momento*/ tab[3][destino_aresta] = prox;/*define qual o vertice anterior*/ } } j++; } } printf("custo=%d\n", tab[1][destino]); /*obter o caminho atravs da linha dos vertices anteriores da tabela auxiliar*/ i = 0; p = destino; while(p != origem){ caminho[i] = p; i++; p = tab[3][p]; } printf("%d",origem);/*imprime a origem*/ /*imprime o resto do caminho*/ for(i--; i != -1; i--){ printf(" %d", caminho[i]); } printf("\n"); } [\code] proj1.h <div class="brush: bash; gutter: false; toolbar: false; class-name: forumCode;" id="forumCodeDiv" iscode="true"> #ifndef PROJ1_H_ #define PROJ1_H_ #include <stdio.h> #include <stdlib.h> #include <math.h> #define INF 999/*valor elevado, tratar como infinito*/ void dijkstra(int matriz[100][3], int destino, int origem, int nvertices, int na restas, int tab[4][110]); #endif /* PROJ1_H_ */ [\code]

</div>

<div class="direita"> </div>

</div>

<div style="background-color: #8e8e8e; color: #ffffff; padding: 5px; line-height : 20px;">[<a name="9" href="#9" style="color: #ffffff !important; text-decoratio n: none !important">9</a>] Enviado em 19/11/2009 - 17:11h <span style="marginleft: 20px;">Re: Ajuda - Dijkstra [RESOLVIDO]</span><span style="float: right; " ><input type="button" onclick="window.location.href='/comunidades/formPost.php?c odigo=13&codtopico=46058&quote=156508'" value=" Quote " class="botao"></span></d iv> <div style="background: #ffffff; min-height: 120px; *height: auto !important; *h eight: 120px;"> <span style="width: 100px; height: 100px; float: left; padding: 5px; text-align: center; border: 0px #ffffff groove;"> <a href="/perfil/verPerfil.php?login=Pirotas"><img src="http://img.vivaolinux.co m.br/imagens/fotos/desconhecido.jpg" alt="Linux user: Sandro" title="Linux user: Sandro" border="0" width="80" height="60"> Pirotas</a> (usa Outra) </span>

<!-- hotwords --> <div id="HOTWordsTxt" name="HOTWordsTxt"> claro que tive de fazer os tais testes de mesa. Obrigado a todos pelas ajudas e dicas que disponibilizaram. Desculpem por ter usado mal as notaes de code </div> <div class="direita"> </div> <div style="background-color: #8e8e8e; color: #ffffff; padding: 5px; line-height : 20px;">[<a name="10" href="#10" style="color: #ffffff !important; text-decorat ion: none !important">10</a>] Enviado em 22/11/2009 - 19:40h <span style="marg in-left: 20px;">Re: Ajuda - Dijkstra [RESOLVIDO]</span><span style="float: right ; "><input type="button" onclick="window.location.href='/comunidades/formPost.ph p?codigo=13&codtopico=46058&quote=156863'" value=" Quote " class="botao"></span> </div> <div style="background: #efefef; min-height: 120px; *height: auto !important; *h eight: 120px;"> <span style="width: 100px; height: 100px; float: left; padding: 5px; text-align: center; border: 0px #ffffff groove;"> <a href="/perfil/verPerfil.php?login=Pirotas"><img src="http://img.vivaolinux.co m.br/imagens/fotos/desconhecido.jpg" alt="Linux user: Sandro" title="Linux user: Sandro" border="0" width="80" height="60"> Pirotas</a> </div>

(usa Outra) </span>

<!-- hotwords --> <div id="HOTWordsTxt" name="HOTWordsTxt"> Julgo que j encontrei a soluo final. Sem ser necessrio alocar espao para a matriz e a tabela, sabendo qual o nmero de li gaes, definindo no ficheiro *.h as constantes das dimenses resolve-se o problema. Para o *.h: definindo as constantes #define MX 300/*numero de linhas da matriz*/ #define MY 3/*numero de colinas da matriz*/ #define TX 4/*numero de linhas da tabela*/ #define TY 300/*numero de colunas da tabela*/ a funo void dijkstra(int matriz[MX][MY], int destino, int origem, int nvertices, int narestas, int tab[TX][TY]); Para o *.c: a funo void dijkstra(int matriz[MX][MY], int destino, int origem, int nvertices, int narestas, int tab[TX][TY]) Sabendo o nmero de ligaes, as constantes a alterar so a MX e a TY

</div> <div class="direita"> </div> <div class="direita" style="padding:5px;"><input type="button" class="botao" val ue=" Responder tpico " onclick="window.location.href='/comunidades/formPost.php?c odigo=13&codtopico=46058'"> </div> <div class="centro"><< Primeira | Anterior <select name="pagina" class="padrao" onchange="window.location.href='/topico/C-C++/Ajuda-Dijkstra?num_por_pagina=12&p agina='+ this.value"> <option value="1" selected="">1 </option></select> Prxima | ltima >></div> <script>tiraBR();</script> </div>

Vous aimerez peut-être aussi