Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define mx 10000
- int dis[mx],parent[mx];
- bool vis[mx],qpush[mx];
- string match_str1,match_str2;
- vector<string>v;
- vector<int >adj[mx];
- map<string,int>m;
- map<string,int>::iterator it;
- char str[30];
- void bfs(int start,int n)
- {
- int i,j,u;
- memset(parent,-1,sizeof(parent));
- memset(dis,INT_MAX,sizeof(dis));
- memset(qpush,false,sizeof(qpush));
- vis[start]=true;
- dis[start]=0;
- parent[start]=-1;
- qpush[start]=true;
- queue<int>q;
- q.push(start);
- while(!q.empty()){
- int x=q.front();
- q.pop();
- for(i=0;i<adj[x].size();i++){
- u=adj[x][i];
- if(parent[x]!=u && qpush[u]==false){
- parent[u]=x;
- dis[u]=dis[x]+1;
- qpush[u]=true;
- q.push(u);
- }
- }
- }
- }
- int main()
- {
- int i,j,k,t;
- cin>>t;
- while(t--){
- v.clear();
- memset(adj,NULL,sizeof(adj));
- m.clear();
- memset(str,0,sizeof(str));
- match_str1.clear();
- match_str2.clear();
- while(1){
- scanf("%s",str);
- if(str[0]=='*') break;
- v.push_back(str);
- }
- getchar();
- int cnt,siz=1;
- for(i=0;i<v.size();i++){
- for(j=i+1;j<v.size();j++){
- if(v[i].size()==v[j].size()){
- cnt=0;
- match_str1=v[i];
- match_str2=v[j];
- for(k=0;k<v[i].size();k++){
- if(match_str1[k]==match_str2[k]){
- continue;
- }
- else cnt++;
- }
- if(cnt==1){
- if(m[match_str1]==0){
- m[match_str1]=siz++;
- }
- if(m[match_str2]==0){
- m[match_str2]=siz++;
- }
- adj[m[match_str1]].push_back(m[match_str2]);
- adj[m[match_str2]].push_back(m[match_str1]);
- }
- }
- }
- }
- //cout<<endl;
- vector<string>x;
- string string_of_range;
- while(1){
- x.clear();
- getline(cin,string_of_range);
- if(string_of_range=="") break;
- stringstream ss(string_of_range);
- while(ss>>string_of_range){
- x.push_back(string_of_range);
- }
- bfs(m[x[0]],siz-1);
- cout<<x[0]<<" "<<x[1]<<" ";
- cout<<dis[m[x[1]]]<<endl;
- }
- if(t!=0)
- cout<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement