D_L3

SDA - hw10 - task3

Dec 10th, 2023
661
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <cmath>
  4. #include <cstdio>
  5. #include <vector>
  6. #include <iostream>
  7. #include <algorithm>
  8. #include <set>
  9. #include <stack>
  10. #include <queue>
  11. #include <unordered_set>
  12. #include <unordered_map>
  13. #include <climits>
  14.  
  15.  
  16. using namespace std;
  17.  
  18. stack<char> res;
  19. int idx = 25;
  20. unordered_map<int, vector<int>> graph;
  21. bool visited[26]{ false };
  22.  
  23. size_t firstDifferentIdx(string prev, string next) {
  24.     size_t idx = 0;
  25.     while (prev[idx] == next[idx] && idx < prev.length() && idx < next.length()) {
  26.         idx++;
  27.     }
  28.     return idx;
  29. }
  30.  
  31. void dfs(int val) {
  32.     visited[val] = true;
  33.     auto neighbours = graph[val];
  34.     for (int i = 0; i < neighbours.size(); i++)
  35.     {
  36.         if (!visited[neighbours[i]])
  37.             dfs(neighbours[i]);
  38.     }
  39.     res.push(val + 'a');
  40. }
  41.  
  42.  
  43. int main()
  44. {
  45.     int n;
  46.     cin >> n;
  47.     string prev, next;
  48.     cin >> prev;
  49.     for (int i = 1; i < n; i++) {
  50.         cin >> next;
  51.         size_t diffIdx = firstDifferentIdx(prev, next);
  52.         if (diffIdx < prev.length()) {
  53.             graph[prev.at(diffIdx) - 'a'].push_back(next.at(diffIdx) - 'a');
  54.         }
  55.         prev = next;
  56.     }
  57.    
  58.     for (auto i : graph)
  59.     {
  60.         if (!visited[i.first])
  61.             dfs(i.first);
  62.     }
  63.  
  64.     while(!res.empty()){
  65.         cout << res.top() << " ";
  66.         res.pop();
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment