Olá pessoal!!!

Sou novo na lista e tb na programação java.

Programa na em C++, e além do mais não orientado!!!

Fiz um pequeno programa pra calcular o menor caminho entre dois vértice
de um grafo.

Se alguém puder de dar um dica de como fazê-lo em java, ficarei muito
agradecido!

Obrigado!!!

Elton

****************************PROGRAMA******************************************

//Em 23/04/2001
#include<iostream.h>
#include<conio.h>
#define TAM 30
#define pinfinito 3.4e34


struct vertex{ int ant,
     saiu;
        float peso;};

void inicializamat(float[TAM][TAM],int);
void inicializavet(vertex[TAM],int,int);
void calcula(float[TAM][TAM],vertex[TAM],int,int,int,int&);

void imprime(vertex[TAM],int i);

void main()
{
    vertex vertice[TAM];
    float caminho[TAM][TAM];

    int resultado[TAM],
 i,
 vertexinicio,
 vertexfim,
 nvertex;      //armazema a quantidade de vertice do grafo

    cout<<" Informe a quantidade de vertice do grafo: ";
    cin>>nvertex;

    inicializamat(caminho,nvertex);

    cout<<"informe o vertice inicial e o final: ";
    cin>>vertexinicio>>vertexfim;

    inicializavet(vertice,vertexinicio,nvertex);

    calcula(caminho,vertice,nvertex,vertexinicio,vertexfim,i);

    if(i != vertexfim)
      cout<<"Nao exite caminho de "<<vertexinicio<<" e "<<vertexfim;
    else
      imprime(vertice,vertexfim);


    getch();


}

void inicializamat(float caminho[TAM][TAM], int n)
{
   int i,
       j;

  for(i = 0; i < n; i++)
  {
     for(j = 0; j <n; j++)
     {
 clrscr();
 cout<<"Existe caminho entre o vertice "<<i<<" e "<<j<<":";
 cin>> caminho[i][j];
     }
  }
}

void inicializavet(vertex v[TAM], int vinicial, int qd)
{
  for(int i = 0; i < qd; i++)
  {
      v[i].ant =  -1;
      v[i].peso =  -1.0;
      v[i].saiu = 0;//falso
  }
  v[vinicial].peso = 0.0;
  v[vinicial].saiu = 1;//verdadeiro
}

void calcula(float caminho[TAM][TAM], vertex vertice[TAM],int qd, int
vi,int vf int& i)
{
    int i = vi,          //armazena a linha corrente
  menor_peso = -1;//armazena o vertice que e' atingido pelo vertice
    //atual e possui menor peso

    while(i != vf && vertice[i].peso != -1.0){
      for(int j  = 0; j < qd; j++)
      {

  if(caminho[i][j] != -1.0)// existe caminho
  {
    if(vertice[j].peso == -1.0)
    {//ainda nao foi visitado
      vertice[j].ant = i;
      vertice[j].peso = caminho[i][j] + vertice[i].peso;
      menor_peso = j;
     }
     else
     {
        if(vertice[j].peso > caminho[i][j] + vertice[i].peso)
        {
      vertice[j].peso = caminho[i][j] + vertice[i].peso;
      vertice[j].ant = i;
      menor_peso = j;
        }
     }
  }
      }
      for( j = 0; j < qd; j++)
      {//procurar o indice do vertice que e' atingido com menor peso

   if(menor_peso == -1)
   {//o vertice[i], nao tem saida para nenhum outro vertice
       if(vertice[j].saiu == 0)
    menor_peso = j;
   }
   else{
     if(vertice[j].saiu == 0 && vertice[j].peso <
vertice[menor_peso].peso && vertice[j].peso != -1.0)
  menor_peso = j;
  }


      }
      if(menor_peso == -1)
      {//percorre o vetor e nao encontra caminho
   vertice[i].peso = -1.0; //termina
      }
      else{
 vertice[menor_peso].saiu = 1;//verdadeiro
 i = menor_peso;
 menor_peso  = -1;
      }
    }

}

void imprime(vertex vertice[TAM], int vf)
{
 int pilha[30];
 int topo = 0;

 int corrente = vf;
 while(corrente != -1)
 {
  pilha[topo++] = corrente;
  corrente = vertice[corrente].ant;
 }

 while(topo != 0)
 {
  cout << pilha[--topo] << "  ";
 }
}


------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a