这是背景:
三百万名男子名字端对端,从纽约到加利福尼亚。每个参与者都得到了一张纸,上面写下了他自己的名字以及他身边的人的名字。线路最西端的那个人不明白该怎么办,所以他扔掉了他的纸;剩余的2,999,999张纸放在一个巨大的篮子里,然后送到华盛顿特区的国家档案馆。这里篮子的内容被彻底洗牌并转移到磁带上。
我正在做导师提供的天真解决方案,随机找到Xc
,然后在unordered_map中使用它搜索,如果它有Xc
作为关键字,获取该关键字的值,nameMap1(shows below)
的西部名称,或nameMap2
搜索的东部名称,直到找不到西风名称或东风名称。
根据这个,我有以下代码。
unique_ptr<string> temXc;
nameList1.push_back(*westName);
temXc.reset(new string);
temXc = move(westName);
bool isRunning = true;
while (isRunning==true)
{
unordered_map<string, string>::const_iterator gotWest = nameMap1.find(*temXc);
if (gotWest == nameMap1.end())
{
nameMap1.clear();
isRunning = false;
}
else
{
temWN.reset(new string);
*temWN = gotWest->second;
nameList1.push_back(*temWN);
nameMap1.erase(*temXc);
temXc.reset(new string);
temXc = move(temWN);
}
}
while循环应该帮助我找到最西部的名字,但它没有。
例如正如背景所说,名称应该如下所示:
名字应该是东部名字,另一个是西部名字。
如果我随机选择b
作为Xc
,则此while循环可以给出b, c, d, e, f
列表,该列表工作正常,但如果我更改为3M.txt
哪个有3M名字,它不工作,答案确实给我一个列表,但在我检查3M.txt
文件后,我发现姓氏仍然有一个西风的邻居,并且是列表的第一个名称(即{ {1}})。