{"id":513,"date":"2013-10-07T17:03:37","date_gmt":"2013-10-07T09:03:37","guid":{"rendered":"http:\/\/hymike.net\/blog\/?p=513"},"modified":"2013-10-07T17:03:37","modified_gmt":"2013-10-07T09:03:37","slug":"test-for-code","status":"publish","type":"post","link":"https:\/\/blog.hymike.net\/?p=513","title":{"rendered":"test for code"},"content":{"rendered":"<p><code style=\"c++\"><br \/>\nclass Solution {<br \/>\npublic:<br \/>\n    struct info<br \/>\n    {<br \/>\n        int id;<br \/>\n        int step;<br \/>\n    };<br \/>\n    void gen(vector<string> &vstr,vector<int> *c, int id,vector<vector<string>> &res)<br \/>\n    {<br \/>\n        vector<string> v;<br \/>\n        vector<vector<string>> tres;<br \/>\n        if(c[id].size()==0)<br \/>\n        {<br \/>\n            v.push_back(vstr[id]);<br \/>\n            res.push_back(v);<br \/>\n            return;<br \/>\n        }<br \/>\n        int i,j;<br \/>\n        for(i=0;i<c[id].size();i++)\n        {\n            gen(vstr,c,c[id][i],tres);\n            for(j=0;j<tres.size();j++)\n            {\n                v=tres[j];\n                v.push_back(vstr[id]);\n                res.push_back(v);\n            }\n            tres.clear();\n        }\n    }\n    vector<vector<string>> findLadders(string start, string end, unordered_set<string> &dict) {<br \/>\n        \/\/ Start typing your C\/C++ solution below<br \/>\n        \/\/ DO NOT write int main() function<br \/>\n        vector<vector<string>> res;<br \/>\n        vector<string> v;<br \/>\n        if(start==end)  \/\/start is end<br \/>\n        {<br \/>\n            v.push_back(start);<br \/>\n            res.push_back(v);<br \/>\n            return res;<br \/>\n        }<br \/>\n        unordered_map<string,int> mp;<br \/>\n        unordered_map<string,int>::iterator iter_m;<br \/>\n        unordered_set<string>::iterator iter_s;<br \/>\n        vector<string> vstr;<br \/>\n        dict.insert(start);<br \/>\n        dict.insert(end);<br \/>\n        int id=0,i,j,k;<br \/>\n        for(iter_s=dict.begin();iter_s!=dict.end();++iter_s)<br \/>\n        {<br \/>\n            vstr.push_back(*iter_s);<br \/>\n            mp.insert(make_pair(*iter_s,id));<br \/>\n            id++;<br \/>\n        }<br \/>\n        int nStart, nEnd;<br \/>\n        iter_m = mp.find(start);<br \/>\n        nStart = iter_m->second;<br \/>\n        iter_m = mp.find(end);<br \/>\n        nEnd = iter_m->second;<\/p>\n<p>        int len = start.length();<br \/>\n        int nTotal = mp.size();<br \/>\n        vector<int> *c = new vector<int> [nTotal];<br \/>\n        int *step = new int [nTotal];<br \/>\n        for(i=0;i<nTotal;i++) step[i]=INT_MAX;\n        step[nStart]=0;\n        info cur,temp;\n        temp.id=nStart;\n        temp.step=0;\n        int nMin = INT_MAX;\n        queue<info> q;<br \/>\n        q.push(temp);<br \/>\n        while(!q.empty())<br \/>\n        {<br \/>\n            cur=q.front();<br \/>\n            q.pop();<br \/>\n            if(cur.step>=nMin) continue;<br \/>\n            string str = vstr[cur.id];<br \/>\n            for(i=0;i<len;i++)\n            {\n                string tstr = str;\n                for(j='a';j<='z';j++)\n                {\n                    tstr[i]=j;\n                    if(tstr==str) continue;\n                    iter_m = mp.find(tstr);\n                    if(iter_m==mp.end()) continue;\n                    id=iter_m->second;<br \/>\n                    if(step[id]<=cur.step) continue;\n                    if(step[id]!=cur.step+1)\n                    {\n                        temp.id=id;\n                        temp.step=cur.step+1;\n                        q.push(temp);\n                        step[id]=cur.step+1;\n                        if(id==nEnd) nMin = cur.step+1; \/\/find end\n                    }\n                    c[id].push_back(cur.id);\n                }\n            }\n        }\n        if(c[nEnd].size()==0)   \/\/no result\n        {\n            delete[]c;\n            delete[]step;\n            return res; \n        }\n        gen(vstr,c,nEnd,res);\n        delete[]c;\n        delete[]step;\n        return res;\n    }\n};\n<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>class Solution { public: struct info { int id; int step &hellip; <a href=\"https:\/\/blog.hymike.net\/?p=513\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u201ctest for code\u201d<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.hymike.net\/index.php?rest_route=\/wp\/v2\/posts\/513"}],"collection":[{"href":"https:\/\/blog.hymike.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.hymike.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.hymike.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.hymike.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=513"}],"version-history":[{"count":0,"href":"https:\/\/blog.hymike.net\/index.php?rest_route=\/wp\/v2\/posts\/513\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.hymike.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.hymike.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.hymike.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}