Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Graph{
- public:
- Graph(int size) : visited(size, false){
- for(int i = 0; i < size; ++i){
- matrix.push_back(vector<int>(size,0));
- string s;
- cout << "Enter name v : ";
- cin >> s;
- ItN.push_back(s);
- NtI[s] = i;
- }
- }
- auto First(string v){
- if(!matrix[NtI[v]].empty()){
- if(NtI[v] >= matrix.size())
- throw runtime_error("going beyond the boundaries of the matrix");
- else{
- for(int i = 0; i < matrix[NtI[v]].size(); ++i){
- if(matrix[NtI[v]][i] != 0)
- return i;
- }
- return -1;
- }
- } else
- throw runtime_error("height does not exist");
- }
- auto Next(string v, int i){
- if(!matrix[NtI[v]].empty()){
- if(i == matrix[NtI[v]].size() - 1){
- return -1;
- }
- for(int x = i + 1; i < matrix[0].size(); ++i){
- if(matrix[NtI[v]][x] != 0)
- return x;
- }
- return -1;
- }
- else
- throw runtime_error("height does not exist");
- }
- string Vertex(string v, int i) {
- if(!matrix[NtI[v]].empty()){
- if (matrix[NtI[v]][i])
- return ItN[i];
- }
- else throw runtime_error("height does not exist");
- }
- void Add_V(string v){
- NtI[v] = matrix.size();
- ItN.push_back(v);
- matrix.push_back(vector<int>(matrix[0].size(), 0));
- for(auto& x : matrix) {
- if(!x.empty())
- x.push_back(0);
- }
- }
- void Add_E(string v, string w, int c){
- matrix[NtI[v]][NtI[w]] = c;
- }
- void Del_V(string v){
- int index = NtI[v];
- matrix.erase(matrix.begin() + index);
- visited.erase(visited.begin() + index);
- ItN.erase(ItN.begin() + index);
- NtI.erase(v);
- for(int i = 0; i < matrix.size(); ++i)
- matrix.erase(matrix.begin() + index);
- for (auto& x : NtI)
- if (x.second > index)
- --x.second;
- }
- auto Del_E(string v, string w){
- matrix[NtI[v]][NtI[w]] = 0;
- }
- auto Edit_V(string v, bool mark){
- visited[NtI[v]] = mark;
- }
- auto Edit_E(string v, string w, int c){
- matrix[NtI[v]][NtI[w]] = c;
- }
- auto print(){
- cout << endl;
- for(int i = 0; i < matrix.size(); ++i){
- if(!matrix[i].empty()) {
- for (int j = 0; j < matrix[i].size(); ++j) {
- cout << matrix[i][j] << ' ';
- }
- cout << endl;
- }
- }
- }
- auto GetWeight(string first, string second) {
- long long i = NtI[first], j = NtI[second];
- if (i < matrix.size() && j < matrix.size())
- return matrix[i][j];
- else throw runtime_error("l");
- }
- bool IsVisited(string node) {
- return visited[NtI[node]];
- }
- private:
- vector<bool> visited;
- vector<vector<int>> matrix;
- map<string, int> NtI;
- vector<string> ItN;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement