Advertisement
Guest User

b00bs

a guest
Apr 30th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.83 KB | None | 0 0
  1.  
  2. #include "graph.h"
  3. #include <stdio.h>
  4. #include <iostream>
  5. using namespace std;
  6. // Implementation for the adjacency matrix representation
  7.  
  8. class Graphm : public Graph{
  9. private:
  10.  
  11.     int numVertex, numEdge, matrixSize; // Store number of vertices, edges
  12.     int *edge;   // Pointer to adjacency matrix
  13.     int *mark;   // Pointer to mark array
  14. public:
  15.     Graphm(int numVert){    // Constructor
  16.       numVertex = numVert;
  17.       numEdge = numVert-1;
  18.       matrixSize = (numVert*(numVert-1))/2;
  19.       //Init(numVert);
  20.     }
  21.    ~Graphm(){       // Destructor
  22.         delete [] mark; // Return dynamically allocated memory
  23.         delete [] edge;
  24.     }
  25.     void Init(int n) { // Initialize the graph
  26.         numVertex = n;
  27.         numEdge = 0;
  28.         mark = new int[n];     // Initialize mark array
  29.         edge = new int[numVertex]; // Make matrix
  30.  
  31.         for (int i = 0; i < matrixSize; i++){
  32.             mark[i] = -1;
  33.             edge[i] = -1;
  34.         }
  35.     }
  36.     int n(){
  37.         return numVertex; // Number of vertices
  38.     }
  39.     int e(){
  40.         return numEdge;    // Number of edges
  41.     }
  42.     // Return first neighbor of "v"
  43.     int first(int v){
  44.         for (int i = v; v < numVertex && i > 0; i--){
  45.             if (edge[i] != -1){
  46.                 return i;
  47.             }
  48.         }
  49.         return numVertex;           // Return n if none
  50.     }
  51.     // Return v’s next neighbor after w
  52.     int next(int v, int w){
  53.         for(int i = w + 1; i < numVertex && i > 0; i--){
  54.             if (edge[i] != 0){
  55.                 return i;
  56.             }
  57.         }
  58.         return numVertex;           // Return n if none
  59.     }
  60.     void setEdge(int v1, int v2, int wght){
  61.       if(v1 > numVertex-1){
  62.         cout << "v1 > " << numVertex << endl;
  63.         return;
  64.       }
  65.       if(v2 > numVertex-1){
  66.         cout << "v2 > " << numVertex << endl;
  67.       }
  68.       if(v1 == v2){
  69.         cout << "No duplicate vertices" << endl;
  70.       }
  71.       if(v1 < v2){
  72.         int temp = v1;
  73.         v1 = v2;
  74.         v2 = temp;
  75.       }
  76.       int e = (v1*(v1-1))/2 + v2;
  77.       if(e < matrixSize && edge[e] == -1 && mark[e] == -1){
  78.         edge[e] = wght;
  79.         mark[e] = 1;
  80.       }
  81.         return;
  82.     }
  83.     void delEdge(int v1, int v2){
  84.         return;
  85.     }
  86.     bool isEdge(int i, int j){
  87.         return false;
  88.     }
  89.     int weight(int v1, int v2){
  90.         return 0;
  91.     }
  92.     int getMark(int v){
  93.         return 0;
  94.     }
  95.     void setMark(int v, int val){
  96.         return;
  97.     }
  98.  
  99. };
  100.  
  101. Graph *create_graph(){   // creates empty graph (to be later initialized with Init method)
  102.     Graph *x = new Graphm(0);
  103.     return x;
  104. }
  105. Graph *read_graph(string filename);  // returns NULL if there is any error reading the graph
  106.  
  107. 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