Hola a todos! Estoy teniendo un problema con un proyecto que he creado para obtener un árbol recubridor (ni mínimo ni máximo) a partir de un grafo precargado, el resultado final debería mostrarme las aristas del arbol recubrido con sus respectivos pesos, el problema es que al compilar por tercera o cuarta vez no me muestra la información completa. Tengo entendido que es un problema de violación de acceso ya que el proceso finalizó con un valor de retorno de 3221225477, en hex: 0xc0000005, el código de windows para indicar violación de acceso.
El problema es que no encuentro el inconveniente en el código.
El problema es que no encuentro el inconveniente en el código.
Código [Seleccionar]
#include <bits/stdc++.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define V 5
int minKey(int key[V], bool mstSet[V])
{
int min = INT_MAX;
int min_index = 0;
for (int v = 0; v < V; v++)
{
if (mstSet[v] == false && key[v] <= min)
min = key[v], min_index = v;
}
return min_index;
}
int minKey1(int key[V], bool mstSet[V])
{
int min = 0;
int min_index = 0;
for (int v = 0; v < V; v++)
{
if (mstSet[v] == false && key[v] >= min)
min = key[v], min_index = v;
}
return min_index;
}
void printMST(int parent[], int graph[V][V])
{
cout<<"Aristas\tPesos\n";
for (int i = 1; i < V; i++)
{
cout<<parent[i]<<" - "<<i<<" \t"<<graph[i][parent[i]]<<" \n";
}
}
void primMST(int graph[V][V])
{
srand(time(NULL));
int u;
int aleatorio;
int parent[V];
int key[V];
bool mstSet[V];
for (int i = 0; i < V; i++)
{
key[i] = INT_MAX, mstSet[i] = false;
}
key[0] = 0;
parent[0] = -1;
for (int count = 0; count < V - 1; count++)
{
aleatorio = rand()%(2-1+1)+1;
cout << aleatorio << endl;
switch (aleatorio)
{
case 1:
{
u = minKey(key, mstSet);
break;
}
case 2:
{
u = minKey1(key, mstSet);
break;
}
}
mstSet[u] = true;
for (int v = 0; v < V; v++)
{
if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v])
parent[v] = u, key[v] = graph[u][v];
}
}
printMST(parent, graph);
}
int main()
{
int graph[V][V] = { { 0, 2, 0, 6, 0 },
{ 2, 0, 3, 8, 5 },
{ 0, 3, 0, 0, 7 },
{ 6, 8, 0, 0, 9 },
{ 0, 5, 7, 9, 0 } };
primMST(graph);
return 0;
}