Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "graph.h"
- #include <stdio.h>
- #include <iostream>
- using namespace std;
- // Implementation for the adjacency matrix representation
- class Graphm : public Graph{
- private:
- int numVertex, numEdge, matrixSize; // Store number of vertices, edges
- int *edge; // Pointer to adjacency matrix
- int *mark; // Pointer to mark array
- public:
- Graphm(int numVert){ // Constructor
- numVertex = numVert;
- numEdge = numVert-1;
- matrixSize = (numVert*(numVert-1))/2;
- //Init(numVert);
- }
- ~Graphm(){ // Destructor
- delete [] mark; // Return dynamically allocated memory
- delete [] edge;
- }
- void Init(int n) { // Initialize the graph
- numVertex = n;
- numEdge = 0;
- mark = new int[n]; // Initialize mark array
- edge = new int[numVertex]; // Make matrix
- for (int i = 0; i < matrixSize; i++){
- mark[i] = -1;
- edge[i] = -1;
- }
- }
- int n(){
- return numVertex; // Number of vertices
- }
- int e(){
- return numEdge; // Number of edges
- }
- // Return first neighbor of "v"
- int first(int v){
- for (int i = v; v < numVertex && i > 0; i--){
- if (edge[i] != -1){
- return i;
- }
- }
- return numVertex; // Return n if none
- }
- // Return v’s next neighbor after w
- int next(int v, int w){
- for(int i = w + 1; i < numVertex && i > 0; i--){
- if (edge[i] != 0){
- return i;
- }
- }
- return numVertex; // Return n if none
- }
- void setEdge(int v1, int v2, int wght){
- if(v1 > numVertex-1){
- cout << "v1 > " << numVertex << endl;
- return;
- }
- if(v2 > numVertex-1){
- cout << "v2 > " << numVertex << endl;
- }
- if(v1 == v2){
- cout << "No duplicate vertices" << endl;
- }
- if(v1 < v2){
- int temp = v1;
- v1 = v2;
- v2 = temp;
- }
- int e = (v1*(v1-1))/2 + v2;
- if(e < matrixSize && edge[e] == -1 && mark[e] == -1){
- edge[e] = wght;
- mark[e] = 1;
- }
- return;
- }
- void delEdge(int v1, int v2){
- return;
- }
- bool isEdge(int i, int j){
- return false;
- }
- int weight(int v1, int v2){
- return 0;
- }
- int getMark(int v){
- return 0;
- }
- void setMark(int v, int val){
- return;
- }
- };
- Graph *create_graph(){ // creates empty graph (to be later initialized with Init method)
- Graph *x = new Graphm(0);
- return x;
- }
- Graph *read_graph(string filename); // returns NULL if there is any error reading the graph
- bool write_graph(Graph *g, string filename); // returns true if write is successful, false otherwise
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement