Este é o Código o que tem de errado nele que não esta compilando?
//Bibliotecas
#include
#include
#include
#include
//N�mero m�ximo de v�rtices
#define MAXV 20
//Estrutura de um n�
typedef struct str_no {
int id;
str_no *proximo;
} str_no;
//Grafo
str_no grafo[MAXV];
void imprimeVetor(int v[], int tam);
void imprimeGrafoConjuntos(str_no g[]);
void imprimeGrafoListas(str_no g[]);
void inicializaGrafo(str_no g[]);
void insereAresta(str_no g[], int v1, int v2);
void criaGrafoExemplo();
// Veja a Quest�o 1 do MAPA
void Busca1(str_no g[], int inicio, int alvo);
// Veja a Quest�o 2 do MAPA
void Busca2(str_no g[], int inicio, int alvo);
//Implementa��o das fun��es
void imprimeVetor(int v[], int tam){
printf("\nVetor:\n[ ");
for(int i=0;i
printf("%d ", v[i]);
}
printf("]\n");
}
void imprimeGrafoConjuntos(str_no g[])
{
str_no *ptr;
printf("================\n Vertices = { ");
for(int i = 0; i
printf("%d, ", g[i].id);
}
printf("}\n");
printf("================\n Arestas = { ");
for(int i = 0; i
for(ptr = g[i].proximo; ptr != NULL; ptr = ptr->proximo){
printf("<%d, %d>; ", g[i].id, ptr->id);
}
}
printf("}\n================\n");
}
void imprimeGrafoListas(str_no g[])
{
str_no *ptr;
printf("================\nLista de Adjacencias:\n");
for(int i = 0; i
printf(" [%d]", g[i].id);
for(ptr = g[i].proximo; ptr != NULL; ptr = ptr->proximo){
printf("-(%d)", ptr->id);
}
printf(".\n");
}
printf("\n================\n");
}
void inicializaGrafo(str_no g[])
{
for(int i=0; i
{
g[i].id = i;
g[i].proximo = NULL;
}
}
void insereAresta(str_no g[], int v1, int v2)
{
str_no *vertice1 = (str_no *) malloc(sizeof(str_no));
str_no *vertice2 = (str_no *) malloc(sizeof(str_no));
if (vertice1 == NULL) {
printf("*** Falha ao alocar o vertice 1. \n");
return;
}
if (vertice2 == NULL) {
printf("*** Falha ao alocar o vertice 2. \n");
return;
}
//Inicializando o v�rtice.
vertice2->id = v2;
vertice2->proximo = NULL;
/* Posicionando o ponteiro para inser��o
do v�rtice v2 na lista de adjac�ncia de v1. */
str_no *ptr ;
for(ptr = &g[v1]; ptr->proximo != NULL; ptr = ptr->proximo)
{
}
//Inserindo v�rtice v2 na lista de adjac�ncia v1.
ptr->proximo = vertice2;
//Inicializando o v�rtice.
vertice1->id = v1;
vertice1->proximo = NULL;
for(ptr = &g[v2]; ptr->proximo != NULL; ptr = ptr->proximo);
//Inserindo v�rtice v2 na lista de adjac�ncia v1.
ptr->proximo = vertice1;
}
void criaGrafoExemplo()
{
insereAresta(grafo, 0, 1);
insereAresta(grafo, 0, 2);
insereAresta(grafo, 1, 3);
insereAresta(grafo, 1, 4);
insereAresta(grafo, 2, 5);
insereAresta(grafo, 2, 6);
insereAresta(grafo, 6, 7);
}
//Qust�o 1 - MAPA
void Busca1(str_no g[], int inicio, int alvo){
int pilha[MAXV]; //pilha
bool visitado[MAXV]; //n�s visitados
int indice = 0; //�ndice do topo da pilha
bool achou = false; //flag de controle d
int corrente = inicio;
str_no *ptr;
printf("=-=-=-= Algoritmo 1 =-=-=-=\n");
//Marcando os n�s como 'n�o visitados'.
for(int i=0; i < MAXV; i++){
visitado[i] = false;
}
while(true){
//Se o n� corrente n�o foi visitado, marque-o como visitado.
//Empilhe o n� corrente.
if(!visitado[corrente]){
printf("VISITANDO: %d. \n", corrente);
if(corrente == alvo)
{
printf("Vertice alvo encontrado!\n\n\n");
return;
}
visitado[corrente] = true;
pilha[indice] = corrente;
indice++;
}
achou = false;
for(ptr = g[corrente].proximo; ptr != NULL; ptr = ptr->proximo){
if(!visitado[ptr->id]){
achou = true;
break;
}
}
if(achou){
//Atalizando o n� corrente, com o v�rtice adjacente n�o visitado.
corrente = ptr->id;
}
else{
indice--;
if(indice==-1){
//N�o h� mais v�rtices n�o visitados, encerrando a busca.
printf("Encerrando a busca. \n");
break;
}
corrente = pilha[indice-1];
}
}
return;
}
//Qust�o 2 - MAPA
void Busca2(str_no g[], int inicio, int alvo){
int fila[MAXV];
bool visitado[MAXV];
int indice = 0;
bool achou = false;
int corrente = inicio;
str_no *ptr;
printf("=-=-=-= Algoritmo 2 =-=-=-= \n");
//Marcando os n�s como 'n�o visitados'.
for(int i=0; i < MAXV; i++)
visitado[i] = false;
//Partindo do primeiro v�rtice.
printf("VISITANDO: %d. \n", corrente);
visitado[corrente] = true;
fila[indice] = corrente;
indice++;
while(true){
for(ptr = g[corrente].proximo; ptr != NULL; ptr = ptr->proximo){
//Caso o v�rtice ainda n�o tenha sido visitado:
corrente = ptr->id;
if(!visitado[corrente]){
//Enfileirando e marcando o v�rtice como visitado.
printf("VISITANDO: %d. \n", corrente);
visitado[corrente] = true;
fila[indice] = corrente;
indice++;
if(corrente == alvo)
{
printf("Vertice alvo encontrado!\n");
return;
}
}
}
if(indice!=0)
{
corrente = fila[0];
for(int i=1;i
fila[i-1]=fila[i];
indice--;
}
else
{
printf("Encerrando busca.\n");
break;
}
}
return;
}
////==================Corpo Principal do Programa====================
int main()
{
//� sempre precizo inicizlizar o grafo.
//Cada n� recebe seu r�tulo, e os ponteiros s�o "zerados"
inicializaGrafo(grafo);
criaGrafoExemplo();
imprimeGrafoListas(grafo);
Busca2(grafo, 3, 7);
return 0;
}
Soluções para a tarefa
Respondido por
1
Olá, Fabianotino,
Já tentou remover os caracteres inválidos? (�)
Atenciosamente,
-Willian Gubiani
Já tentou remover os caracteres inválidos? (�)
Atenciosamente,
-Willian Gubiani
fabianotino:
Willian o código esta ok descobri depois de mandar a pergunta. O professor fez o código em c++ e peguei o código e salvei em c e agora para saber que o professor fez em c++. Um amigo de curso falou sobre esta possibilidade e salveiem c++ o código rodou redondo redondo.
Perguntas interessantes