Skip to content

Commit 36ababe

Browse files
authored
Merge pull request kothariji#758 from Ridwan-Rafi/patch-1
429 - Word Transformation.cpp
2 parents 6391586 + cefaa44 commit 36ababe

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
4+
map<string,vector<string>>word;
5+
vector<string>sz[222];
6+
map<string,bool>visited;
7+
map<string,int>lvl;
8+
9+
bool match(string s,string ss,int ln)
10+
{
11+
int cnt=0;
12+
for(int i=0;i<ln;i++)
13+
{
14+
if(s[i]!=ss[i])cnt++;
15+
if(cnt>1)break;
16+
}
17+
if(cnt==1)return 1;
18+
else return 0;
19+
}
20+
21+
void node_s(string s,int ln)
22+
{
23+
for(string n:sz[ln])
24+
{
25+
if(match(s,n,ln))
26+
{
27+
word[s].push_back(n);
28+
word[n].push_back(s);
29+
}
30+
}
31+
}
32+
33+
void print()
34+
{
35+
for(auto i=word.begin();i!=word.end();i++)
36+
{
37+
cout<<i->first<<" : ";
38+
vector<string>v=i->second;
39+
for(string s:v)cout<<s<<' ';
40+
cout<<endl;
41+
}
42+
}
43+
void clr()
44+
{
45+
//visited.clear();
46+
word.clear();
47+
for(int i=0;i<220;i++)sz[i].clear();
48+
}
49+
50+
int bfs(string s,string d)
51+
{
52+
queue<string>q;
53+
vector<string>trv;
54+
string node;
55+
q.push(s);
56+
lvl[s]=0;
57+
while(!q.empty())
58+
{
59+
node=q.front();
60+
q.pop();
61+
visited[node]=1;
62+
trv=word[node];
63+
for(string nd:trv)
64+
{
65+
if(visited[nd]==0)
66+
{
67+
q.push(nd);
68+
lvl[nd]=lvl[node]+1;
69+
// cout<<"root= "<<node<<" rlvl= "<<lvl[node]<<" child= "<<nd<<" clvl= "<<lvl[nd]<<endl;
70+
if(nd==d)
71+
{
72+
return lvl[nd];
73+
}
74+
}
75+
}
76+
}
77+
return 0;
78+
}
79+
80+
int main()
81+
{
82+
int t,ln;
83+
string s,d,q;
84+
cin>>t;
85+
while(t--)
86+
{
87+
88+
clr();
89+
while(cin>>s && s != "*")
90+
{
91+
ln=s.size();
92+
node_s(s,ln);
93+
sz[ln].push_back(s);
94+
}
95+
//print();
96+
getchar();
97+
while(getline(cin,q))
98+
{
99+
ln=q.size();
100+
if(ln==0)break;
101+
102+
s.clear();
103+
d.clear();
104+
int l;
105+
for(l=0;l<ln;l++)
106+
{
107+
if(q[l]==' ')break;
108+
s+=q[l];
109+
}
110+
for(l=l+1;l<ln;l++)
111+
{
112+
//if(q[l]==' ')break;
113+
d+=q[l];
114+
}
115+
//cout<<s<<' '<<d<<endl;
116+
visited.clear();
117+
cout<<s<<' '<<d<<' '<<bfs(s,d)<<endl;
118+
}
119+
if(t>0)
120+
cout<<"\n";
121+
}
122+
return 0;
123+
}

0 commit comments

Comments
 (0)