编程挑战 最小操作数 ,错在哪里了
本帖最后由 iyaosan 于 2013-07-17 14:23:32 编辑 题目在这里 http://hero.pongo.cn/Question/Details?ID=57&ExamID=55
以下是挑战代码,提交后显示挑战失败。求错在哪里
#include <string>
#include <vector>
#include <iostream>
#include <set>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
class Solution
{
private:
void findWord(const string start,const string end,const set<string>& dict,vector<string> process,int s,int &ss,vector<vector<string>> &r)
{
for(set<string>::const_iterator i=dict.begin();i!=dict.end();++i)
{
const string &word=*i;
if(word.size()!=start.size())
{
continue;
}
if(std::find(process.begin(),process.end(),word)!=process.end())
{
continue;
}
int c=0;
for(int e=0;e<word.size();++e)
{
if(word[e]!=start[e])
{
if(++c>1)
{
break;
}
}
}
if(c==1)
{
vector<string> tmpprocess=process;
tmpprocess.push_back(word);
c=0;
for(int e=0;e<word.size();++e)
{
if(word[e]!=end[e])
{
if(++c>1)
{
break;
}
}
}
if(c==1)
{
if(s<ss)
{
r.clear();
}
tmpprocess.push_back(end);
r.push_back(tmpprocess);
ss=s;
}
else
{
if(s<ss || ss==0)
{
findWord(word,end,dict,tmpprocess,s+1,ss,r);
}
}
}
}
}
public:
vector<vector<string>> findLadders(string start, string end, set<string>& dict)
{
vector<vector<string>> r;
if(start!=end && start.size()==end.size())
{
vector<string> process;
process.push_back(start);
int ss=0;
findWord(start,end,dict,process,0,ss,r);
}
return r;
}
};
以下是自己写的测试代码,不用提交
int _tmain(int argc, _TCHAR* argv[])
{
string A = "hit";
string B = "cog";
set<string> Dict ;
Dict.insert("aitd");
Dict.insert("aig");
Dict.insert("cig");
Dict.insert("cit");
Dict.insert("cot");
Solution s;
vector<vector<string>> r=s.findLadders(A,B,Dict);
for(vector<vector<string>>::iterator i=r.begin();i<r.end();++i)
{
for(vector<string>::iterator e=i->begin();e<i->end();++e)
{
std::cout<<*e<<std::endl;
}
}
return 0;
}
[解决办法]
那你s>ss的时候也把答案给push进r?