首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

编程挑战 最小操作数 ,错在哪儿了

2013-08-01 
编程挑战 最小操作数 ,错在哪里了本帖最后由 iyaosan 于 2013-07-17 14:23:32 编辑题目在这里 http://hero

编程挑战 最小操作数 ,错在哪里了
本帖最后由 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;
}



[解决办法]
引用:
dfs找到的第一个解不一定是最短解。
看这个,
if(s<ss)
{
  r.clear();
}

如果找到更短的,我会把之前的给清除。

那你s>ss的时候也把答案给push进r?

热点排行