Ir ao conteúdo

Posts recomendados

Postado
#include <stdio.h>
#include <locale.h>

#define qtdVertices 6
#define qtdArestas 5

int vertice [qtdVertices];

struct Aresta{
   int Emergente;
   int Incidente;
}aresta[qtdArestas];



void imprimir();
void popularGrafo();


void main(void){

	setlocale(LC_ALL,"Portuguese");

	popularGrafo();
	imprimir();

	int Origem = 0, Destino = 0, Intermediario = -1;


	printf("\n\nInsira o vértice de Origem: ");		scanf("%d",&Origem);
	printf("Insira o vértice de Destino: ");		scanf("%d",&Destino);


	printf("\n---------Procurando Caminho-----------\n");

	int i = 0, varAuxiliar = Origem;

	while(Intermediario != Destino){

		for(i=0; i<qtdArestas; i++){

			if(Intermediario == aresta[i].Emergente){
			printf("%d ==>",Origem);
			Origem = Intermediario;
			Intermediario = -1;
			}


			if(Origem == aresta[i].Emergente){
				if(Intermediario == -1)	Intermediario = aresta[i].Incidente;
				if(Destino == aresta[i].Incidente){
					 printf("%d ==> %d\tEncontrado",aresta[i].Emergente,aresta[i].Incidente);
					 Intermediario = Destino;
					 break;
				}
			}
		}

		if(Intermediario != Destino){

			for(i = (qtdArestas -1); i>=0; i--){

				if(Intermediario == aresta[i].Incidente){
					printf("%d ==>", Origem);
					Origem = Intermediario;
					Intermediario = -1;
				}
				if(Origem == aresta[i].Incidente){
					if(Intermediario ==-1)		Intermediario = aresta[i].Emergente;

					if((Destino == aresta[i].Emergente) || (aresta[i].Emergente ==1)){
						printf("%d == > %d ", aresta[i].Incidente, aresta[i].Emergente);
						break;
					}
				}
			}

		}
		if((Intermediario ==1)&&(Intermediario != Destino)){
			Origem = 1;
			Intermediario =-1;
		}

		if((Origem ==1) && (Destino == 5))
			Intermediario = 4;
	}
	
	if(Destino != aresta[i].Incidente){
					 printf("%d ==> %d\t nao Encontrado",aresta[i].Emergente,aresta[i].Incidente);
					 Intermediario = Destino;
					 //break;
				}
}




void popularGrafo(){


   int i = 0;
   for(i = 0; i < qtdVertices;i++)	vertice[i] = i + 1;
   //popular as arestas

	// aresta 1 <==> 2
	   aresta[0].Emergente = 1;
	   aresta[0].Incidente = 2;

	// aresta 2 <==> 3
	   aresta[2].Emergente = 2;
	   aresta[2].Incidente = 3;
	   
	// aresta 1 <==> 4
   	   aresta[1].Emergente = 1;
       aresta[1].Incidente = 4;
       
	// aresta 4 <==> 5
	   aresta[3].Emergente = 4;
	   aresta[3].Incidente = 5;
	   
	// aresta 5 <==> 6
	   aresta[4].Emergente = 3;
	   aresta[4].Incidente = 6;
}


void imprimir(){

   int i = 0;

   printf("\n Vértices\n");

   for(i=0;i<qtdVertices;i++){
      printf("%d,\t",vertice[i]);
   }

   printf("\n Lista de Arestas-----------\n");

   for(i = 0; i < qtdArestas;i++){
      printf("%d <==> %d\n",aresta[i].Emergente,aresta[i].Incidente);
   }

}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...