#include <iostream>
#include <fstream>
#include "graph.h"
#include "equiv.h"
using namespace std;
/**********************************************
* readGraph *
**********************************************
* readGraph reads in information about graph *
* g from standard input then sets the edges *
* to the maximum number of edges avaliable. *
**********************************************/
void readGraph(Graph& g)
{
int input;
cin >> g.numVert;
bool finished;
finished = false;
if(g.numEdges > 0)
delete [] g.arrayEdges;
g.arrayEdges = new Edge[maxEdges];
int k = 0;
while(!finished)
{
cin >> input;
if(input==0) break;
g.arrayEdges[k].vertOne = input;
cin >> g.arrayEdges[k].vertTwo;
cin >> g.arrayEdges[k].weight;
k++;
}
g.numEdges = k;
}
/************************************************
* printGraph *
************************************************
* printGraph prints out each vertice and weight*
* of graph g from the standard input. *
**********************************************/
void printGraph(Graph& g)
{
cout << "Vertices Weight" << endl;
for(int k=0; k < g.numEdges; k++)
cout << g.arrayEdges[k].vertOne << " " << g.arrayEdges[k].vertTwo<< "\t " << g.arrayEdges[k].weight << endl;
}
/**********************************************
* kruskalAlg *
**********************************************
* kruskalAlg computes the minimal spanning *
* tree using Kruskal's algorithm, it takes *
* graph g as a parameter and yields it to *
* graph k. *
**********************************************/
void kruskalAlg(Graph& g)
{
Graph k;
Equiv e;
k.numVert = g.numVert;
k.numEdges = 0;
k.arrayEdges = new Edge[maxEdges];
e.arraySize = 0;
e.arrayIntegers = 0;
int a = g.numEdges-1;
while(a > 1)
{
for(int i = 0; i < a; i++)
{
if(g.arrayEdges[i].weight > g.arrayEdges[i+1].weight)
{
Edge edgeOne = g.arrayEdges[i+1];
g.arrayEdges[i+1] = g.arrayEdges[i];
g.arrayEdges[i] = edgeOne;
}
}
a--;
}
for(int i = 0; i < g.numEdges; i++)
{
if(!together(e, g.arrayEdges[i].vertOne, g.arrayEdges[i].vertTwo))
{
combine(e, g.arrayEdges[i].vertOne, g.arrayEdges[i].vertTwo);
k.arrayEdges[k.numEdges++] = g.arrayEdges[i];
}
}
g.numEdges = k.numEdges;
delete [] g.arrayEdges;
g.arrayEdges = new Edge[maxEdges];
for(int i = 0; i < k.numEdges; i++)
g.arrayEdges[i] = k.arrayEdges[i];
}
/**********************************************
* totalWeight *
**********************************************
* totalWeight computes the total weight of *
* graph g. *
**********************************************/
int totalWeight(Graph& g)
{
int total = 0;
for(int k = 0; k < g.numEdges; k++)
total += g.arrayEdges[k].weight;
return total;
}