题目:
分析:
很容易想到是构建一个无向图。
代码:
class Solution {
public:
vector<vector<int> > vv;
bool f(string s1,string s2)
{
int c=0;
for(int i=0;i<s1.size();i++)
{
if(s1[i]!=s2[i]) c++;
}
if(c==1) return 1;
return 0;
}
int minMutation(string start, string end, vector<string>& bank) {
vector<int> v;
bank.insert(bank.begin(),start);
int index=-1;
for(int i=0;i<bank.size();i++)
{
if(bank[i]==end)
{
index=i;break;
}
}
if(index==-1) return -1;
for(int i=0;i<bank.size();i++) vv.push_back(v);
for(int i=0;i<bank.size()-1;i++)
{
for(int j=i+1;j<bank.size();j++)
{
if(f(bank[i],bank[j])){
vv[i].push_back(j);
vv[j].push_back(i);
}
}
}
//BFS
queue<int> q;
int t=1;
q.push(0);
map<int,int> m;
m[0]=1;
while(!q.empty())
{
queue<int> q2;
while(!q.empty())
{
int c=q.front();
q.pop();
for(int i=0;i<vv[c].size();i++)
{
if(m[vv[c][i]]==0)
{
m[vv[c][i]]=1;
if(vv[c][i]==index) return t;
q2.push(vv[c][i]);
}
}
}
q=q2;
t++;
}
return -1;
}
};