Advertisement
CyberN00b

Untitled

Jan 6th, 2023
1,132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.62 KB | None | 0 0
  1. class Graph{
  2.     public:
  3.  
  4.  
  5.         Graph(int size) : visited(size, false){
  6.             for(int i = 0; i < size; ++i){
  7.                 matrix.push_back(vector<int>(size,0));
  8.                 string s;
  9.                 cout << "Enter name v : ";
  10.                 cin >> s;
  11.                 ItN.push_back(s);
  12.                 NtI[s] = i;
  13.             }
  14.         }
  15.  
  16.         auto First(string v){
  17.             if(!matrix[NtI[v]].empty()){
  18.                 if(NtI[v] >= matrix.size())
  19.                     throw runtime_error("going beyond the boundaries of the matrix");
  20.                 else{
  21.                     for(int i = 0; i < matrix[NtI[v]].size(); ++i){
  22.                         if(matrix[NtI[v]][i] != 0)
  23.                             return i;
  24.                     }
  25.                     return -1;
  26.                 }
  27.             } else
  28.                 throw runtime_error("height does not exist");
  29.         }
  30.  
  31.         auto Next(string v, int i){
  32.             if(!matrix[NtI[v]].empty()){
  33.                 if(i == matrix[NtI[v]].size() - 1){
  34.                     return -1;
  35.                 }
  36.                 for(int x = i + 1; i < matrix[0].size(); ++i){
  37.                     if(matrix[NtI[v]][x] != 0)
  38.                         return x;
  39.                 }
  40.                 return -1;
  41.             }
  42.             else
  43.                 throw runtime_error("height does not exist");
  44.         }
  45.  
  46.         string Vertex(string v, int i) {
  47.             if(!matrix[NtI[v]].empty()){
  48.                 if (matrix[NtI[v]][i])
  49.                     return ItN[i];
  50.             }
  51.             else throw runtime_error("height does not exist");
  52.  
  53.         }
  54.  
  55.         void Add_V(string v){
  56.             NtI[v] = matrix.size();
  57.             ItN.push_back(v);
  58.             matrix.push_back(vector<int>(matrix[0].size(), 0));
  59.             for(auto& x : matrix) {
  60.                 if(!x.empty())
  61.                     x.push_back(0);
  62.             }
  63.         }
  64.  
  65.         void Add_E(string v, string w, int c){
  66.             matrix[NtI[v]][NtI[w]] = c;
  67.         }
  68.  
  69.         void Del_V(string v){
  70.             int index = NtI[v];
  71.             matrix.erase(matrix.begin() + index);
  72.             visited.erase(visited.begin() + index);
  73.             ItN.erase(ItN.begin() + index);
  74.             NtI.erase(v);
  75.             for(int i = 0; i < matrix.size(); ++i)
  76.                 matrix.erase(matrix.begin() + index);
  77.             for (auto& x : NtI)
  78.                 if (x.second > index)
  79.                     --x.second;
  80.         }
  81.  
  82.         auto Del_E(string v, string w){
  83.             matrix[NtI[v]][NtI[w]] = 0;
  84.         }
  85.  
  86.         auto Edit_V(string v, bool mark){
  87.             visited[NtI[v]] = mark;
  88.         }
  89.  
  90.         auto Edit_E(string v, string w, int c){
  91.             matrix[NtI[v]][NtI[w]] = c;
  92.         }
  93.  
  94.         auto print(){
  95.             cout << endl;
  96.             for(int i = 0; i < matrix.size(); ++i){
  97.                 if(!matrix[i].empty()) {
  98.                     for (int j = 0; j < matrix[i].size(); ++j) {
  99.                         cout << matrix[i][j] << ' ';
  100.                     }
  101.                     cout << endl;
  102.                 }
  103.  
  104.             }
  105.         }
  106.  
  107.         auto GetWeight(string first, string second) {
  108.             long long i = NtI[first], j = NtI[second];
  109.             if (i < matrix.size() && j < matrix.size())
  110.                 return matrix[i][j];
  111.             else throw runtime_error("l");
  112.         }
  113.  
  114.         bool IsVisited(string node) {
  115.             return visited[NtI[node]];
  116.         }
  117.  
  118.     private:
  119.  
  120.         vector<bool> visited;
  121.         vector<vector<int>> matrix;
  122.         map<string, int> NtI;
  123.         vector<string> ItN;
  124.  
  125.     };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement