Advertisement
Guest User

Untitled

a guest
Mar 1st, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <set>
  4. using namespace std;
  5.  
  6. vector <string> grid ;
  7. vector < vector<char> > depend(26) ;
  8. string result ;
  9. bool vis[26] = {false};
  10.  
  11. void dfs(char c) ;
  12. void check (int r ,int c);
  13.  
  14. int main( int argc, char ** argv ) {
  15. string s ;
  16. while(cin >> s)
  17. {
  18. while(s != "#")
  19. {
  20. grid.push_back(s) ;
  21. cin >> s ;
  22. }
  23. set <char> ss ;
  24. for(int i = 0;i < grid.size();i++)
  25. for(int j = 0,n = grid[i].length();j < n;j++)
  26. ss.insert(grid[i][j]);
  27. int r = grid.size()-1 ;
  28. check(r,0) ;
  29. for(auto it = ss.begin();it != ss.end();it++)
  30. if(!vis[*it-'A'])
  31. dfs(*it) ;
  32. cout << result << endl;
  33. grid.clear() ;
  34. for(int i = 0;i < 26;i++)
  35. depend[i].clear() ;
  36. fill_n(vis,26,0) ;
  37. }
  38. return 0;
  39. }
  40.  
  41. void check (int r ,int c)
  42. {
  43. if(r == 0)
  44. return ;
  45. if(c == min(grid[r].length(),grid[r-1].length())){
  46. check(r-1,0) ;
  47. return ;
  48. }
  49. if(grid[r][c] == grid[r-1][c])
  50. check(r,c+1) ;
  51. if(grid[r][c] != grid[r-1][c])
  52. {
  53. depend[grid[r][c]-'A'].push_back(grid[r-1][c]) ;
  54. check(r-1,0) ;
  55. }
  56. }
  57.  
  58. void dfs(char c)
  59. {
  60. vis[c-'A'] = true ;
  61. for(int i = 0;i < depend[c-'A'].size();i++)
  62. {
  63. char child = depend[c-'A'][i] ;
  64. if(!vis[child-'A'])
  65. dfs(child) ;
  66. }
  67. result += c;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement