Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <set>
- using namespace std;
- vector <string> grid ;
- vector < vector<char> > depend(26) ;
- string result ;
- bool vis[26] = {false};
- void dfs(char c) ;
- void check (int r ,int c);
- int main( int argc, char ** argv ) {
- string s ;
- while(cin >> s)
- {
- while(s != "#")
- {
- grid.push_back(s) ;
- cin >> s ;
- }
- set <char> ss ;
- for(int i = 0;i < grid.size();i++)
- for(int j = 0,n = grid[i].length();j < n;j++)
- ss.insert(grid[i][j]);
- int r = grid.size()-1 ;
- check(r,0) ;
- for(auto it = ss.begin();it != ss.end();it++)
- if(!vis[*it-'A'])
- dfs(*it) ;
- cout << result << endl;
- grid.clear() ;
- for(int i = 0;i < 26;i++)
- depend[i].clear() ;
- fill_n(vis,26,0) ;
- }
- return 0;
- }
- void check (int r ,int c)
- {
- if(r == 0)
- return ;
- if(c == min(grid[r].length(),grid[r-1].length())){
- check(r-1,0) ;
- return ;
- }
- if(grid[r][c] == grid[r-1][c])
- check(r,c+1) ;
- if(grid[r][c] != grid[r-1][c])
- {
- depend[grid[r][c]-'A'].push_back(grid[r-1][c]) ;
- check(r-1,0) ;
- }
- }
- void dfs(char c)
- {
- vis[c-'A'] = true ;
- for(int i = 0;i < depend[c-'A'].size();i++)
- {
- char child = depend[c-'A'][i] ;
- if(!vis[child-'A'])
- dfs(child) ;
- }
- result += c;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement