Kruskal algorithm help.

Hello, I got this code to work without a class object orientated format, but when i put the program in a class i get a crash with memory acces error at line 243. Can someone explain what is going on because the program works when i simply have it outside of a class. Thanks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#ifndef PATHS
#define PATHS

#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <vector>

using namespace std;

#define infinity 999

class Paths
{
	private : 

		int i,n,j,cost[10][10];
		int dist[10],path[10],reach[10];
		int adj[10][10];
		int k,a,b,v,u,ne;
		int visited[10],minimumcost,parent[9];
		int minimum;
		int d[10][10];

	public  : 

		void Prims();
		void Dijkstra();
		void Kruskal();
		void Allpair();
		void shortpath(int);
		void printpath(int);
		int choose();
};

#endif

//////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////// Kruskal

void Paths::Kruskal()
  {
	  i,j,n,ne,a,b,u,v = 1;
	  	//////////////////////
cout<<endl<<endl;
cout<<"        Kruskal's Algorithm"<<endl;
cout<<"----------------------------------"<<endl;
	///////////////
   printf("\nEnter the number of vertices:");
    scanf("%d",&n);
    printf("Enter the cost of matrix::\n");
    for (i=1;i<=n;i++)
 for (j=1;j<=n;j++)
 {
   scanf("%d",&cost[i][j]);
    if(cost[i][j]==0)
     cost[i][j]=999;
 }
   printf("\nThe edges of spanning tree are:\n");
  while(ne<n)
    {
      for (i=1,minimum=999;i<=n;i++)
      {
  for (j=1;j<=n;j++)
    {

    if(cost[i][j]<minimum)
      {
      minimum=cost[i][j];
      a=u=i;
      b=v=j;
       }
     }
        }
      while(parent[u])
	  u=parent[u];
      while(parent[v])
	  v=parent[v];
        if(u!=v)
   {
    printf("\n%d) Edge(%d,%d)=%d",ne++,a,b,minimum);
    minimumcost += minimum;
    parent[v]=u;
   }
  cost[a][b]=cost[b][a]=999;
      }
    printf("\n\n minimum cost is = %d\n",minimumcost);
   }
   



The problem happens at this point of the code.

1
2
3
4
5
     while(parent[u])
	  u=parent[u];
      while(parent[v])
	  v=parent[v];
        if(u!=v)
I know it has to do something with my private initiations.

If i take everything inside of private, outside of the class the problem goes away.

alright reduced to problem to this.

int parent[9];

it has to be outside of the class. What might be causing this to happen? What can i change to be able to put it back in the class?
Last edited on
Topic archived. No new replies allowed.