Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3. #include <string>
  4. #include <math.h>
  5.  
  6. using namespace std;
  7. bool shaml(stack <string> cont , string b);
  8. stack <string> putall(stack <string> cont);
  9. void addrow(vector < vector <char> > *cont,vector < string > c,int row,int col);
  10. void addcol(vector < vector <char> > *cont,vector < string > c,int row,int col);
  11. void ins(vector < vector <char> > *ss,char a,char b);
  12. vector <string> gee(string x);
  13. string getresult(vector < vector <char> > cont);
  14. int getunvistednode(bool arr[],int size);
  15. void die(vector < vector <char> > cont,stack <char> *result,bool arr[],int node);
  16. bool check(char x,vector < vector <char> > cont,bool arr[]);
  17. int getnum(vector < vector <char> > cont,char a);
  18. int main() {
  19.  
  20.  
  21.  
  22. vector < string > c;
  23. string o;
  24.  
  25.  
  26. do {
  27. cin>>o;
  28. c.push_back(o);
  29.  
  30. } while(o!="#");
  31. vector < vector <char> > cont;
  32. set <char> q;
  33.  
  34. for(int i=0;i<c.size()-1;i++){
  35. for(int j=0;j<(c[i]).length();j++){
  36. if(!q.count(c[i][j])){
  37. vector <char >t;
  38. t.push_back(c[i][j]);
  39. cont.push_back(t);
  40. q.insert(c[i][j]);
  41. }
  42. // addrow(&cont,c,i,j);
  43. addcol(&cont,c,i,j);
  44. }
  45. }
  46. /*for(int i=0;i<cont.size();i++){
  47. for(int j=0;j<cont[i].size();j++){
  48. cout<<cont[i][j]<<" ";
  49. }
  50. cout<<endl;
  51. }*/
  52.  
  53. //vector < vector <char> > cont;
  54. //cont.resize()
  55.  
  56. cout<<(getresult(cont));
  57.  
  58.  
  59. }
  60.  
  61.  
  62.  
  63. string getresult(vector < vector <char> > cont){
  64. int size=cont.size();
  65. bool death[size]={false};
  66.  
  67. stack <char> result;
  68. int t=getunvistednode(death,size);
  69. while(getunvistednode(death,size)!=-1){
  70. die(cont,&result,death,getunvistednode(death,size));
  71. }
  72. string x="";
  73. while(!result.empty()){
  74. x+=result.top();
  75. result.pop();
  76. }
  77. return x;
  78. }
  79.  
  80.  
  81. void die(vector < vector <char> > cont,stack <char> *result,bool arr[],int node){
  82. if(arr[node])return;
  83. arr[node]=true;
  84. for(int i=1;i<cont[node].size();i++){
  85. if(!check(cont[node][i],cont,arr)){
  86. die(cont,&(*result),arr,getnum(cont,cont[node][i]));
  87. }
  88. }
  89. (*result).push(cont[node][0]);
  90. }
  91. int getnum(vector < vector <char> > cont,char a){
  92. for(int i=0;i<cont.size();i++){
  93. if(cont[i][0]==a)
  94. return i;
  95. }
  96. }
  97. bool check(char x,vector < vector <char> > cont,bool arr[]){
  98. for(int i=0;i<cont.size();i++){
  99. if(cont[i][0]==x){
  100. return arr[i];
  101. }
  102. }
  103. }
  104.  
  105. int getunvistednode(bool arr[],int size){
  106. for(int i=0;i<size;i++){
  107. if(!arr[i])
  108. return i;
  109. }
  110. return -1;
  111.  
  112. }
  113. void addcol(vector < vector <char> > *cont,vector < string > c,int row,int col){
  114. string guide="";
  115. for(int i=0;i<col;i++){
  116. guide+=(c)[row][i];
  117. }
  118.  
  119. for(int i=row+1;i<(c).size()-1;i++){
  120. string war="";
  121. if(c[row].length()<col)continue;
  122. for(int j=0;j<col;j++){
  123. war+=(c)[i][j];
  124. }
  125. if(war==guide){
  126. ins(&(*cont),c[row][col],c[i][col]);
  127. }else{
  128. return;
  129. }
  130. }
  131.  
  132. }
  133. void ins(vector < vector <char> > *ss,char a,char b){
  134. if(a==b)return;
  135. for(int i=0;i<(*ss).size();i++){
  136.  
  137. if((*ss)[i][0]==a){
  138. for(int j=1;j<(*ss)[i].size();j++){
  139. if((*ss)[i][j]==b){
  140. return;
  141. }
  142. }
  143. (*ss)[i].push_back(b);
  144. return ;
  145. }
  146. }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement