Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.71 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define mx 10000
  4. int dis[mx],parent[mx];
  5. bool vis[mx],qpush[mx];
  6. string match_str1,match_str2;
  7. vector<string>v;
  8. vector<int >adj[mx];
  9. map<string,int>m;
  10. map<string,int>::iterator it;
  11. char str[30];
  12. void bfs(int start,int n)
  13. {
  14.     int i,j,u;
  15.     memset(parent,-1,sizeof(parent));
  16.     memset(dis,INT_MAX,sizeof(dis));
  17.     memset(qpush,false,sizeof(qpush));
  18.     vis[start]=true;
  19.     dis[start]=0;
  20.     parent[start]=-1;
  21.     qpush[start]=true;
  22.     queue<int>q;
  23.     q.push(start);
  24.     while(!q.empty()){
  25.         int x=q.front();
  26.         q.pop();
  27.         for(i=0;i<adj[x].size();i++){
  28.             u=adj[x][i];
  29.             if(parent[x]!=u && qpush[u]==false){
  30.                 parent[u]=x;
  31.                 dis[u]=dis[x]+1;
  32.                 qpush[u]=true;
  33.                 q.push(u);
  34.             }
  35.         }
  36.     }
  37. }
  38. int main()
  39. {
  40.     int i,j,k,t;
  41.     cin>>t;
  42.     while(t--){
  43.         v.clear();
  44.         memset(adj,NULL,sizeof(adj));
  45.         m.clear();
  46.         memset(str,0,sizeof(str));
  47.         match_str1.clear();
  48.         match_str2.clear();
  49.         while(1){
  50.             scanf("%s",str);
  51.             if(str[0]=='*') break;
  52.             v.push_back(str);
  53.         }
  54.         getchar();
  55.         int cnt,siz=1;
  56.         for(i=0;i<v.size();i++){
  57.             for(j=i+1;j<v.size();j++){
  58.                 if(v[i].size()==v[j].size()){
  59.                     cnt=0;
  60.                     match_str1=v[i];
  61.                     match_str2=v[j];
  62.                     for(k=0;k<v[i].size();k++){
  63.                         if(match_str1[k]==match_str2[k]){
  64.                             continue;
  65.                         }
  66.                         else cnt++;
  67.                     }
  68.                     if(cnt==1){
  69.                         if(m[match_str1]==0){
  70.                             m[match_str1]=siz++;
  71.                         }
  72.                         if(m[match_str2]==0){
  73.                             m[match_str2]=siz++;
  74.                         }
  75.                         adj[m[match_str1]].push_back(m[match_str2]);
  76.                         adj[m[match_str2]].push_back(m[match_str1]);
  77.                     }
  78.                 }
  79.             }
  80.         }
  81.         //cout<<endl;
  82.         vector<string>x;
  83.         string string_of_range;
  84.         while(1){
  85.             x.clear();
  86.             getline(cin,string_of_range);
  87.             if(string_of_range=="") break;
  88.             stringstream ss(string_of_range);
  89.             while(ss>>string_of_range){
  90.                 x.push_back(string_of_range);
  91.             }
  92.             bfs(m[x[0]],siz-1);
  93.             cout<<x[0]<<" "<<x[1]<<" ";
  94.             cout<<dis[m[x[1]]]<<endl;
  95.         }
  96.         if(t!=0)
  97.         cout<<endl;
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement