//算法描述:简单的搜索的问题,如果用pair的<mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>话可以使问题变得很简单,另外用list存储序列,其自、、//带的sort函数实现的排序刚好与题目要求一致,按首个元素的字典序。 #include<iostream> #include<queue> #include<string> #include<list> using namespace std; list<pair<string,string> > in,out;//in是输入序列,out是待输出的序列,基本元素是pari<匹配的//主名,匹配的副名> list<pair<string,string> >::iterator p,q; int main() { int n; while(cin>>n&&n) { in.clear();out.clear(); while(n--) { string name;string id; cin>>name>>id; in.push_back(pair<string,string>(name,id)); } while(!in.empty()) { p=in.begin(); int state=1; q=p;q++; while(q->second!=p->second) q++; out.push_back(pair<string,string>(p->first,q->first)); in.erase(p);in.erase(q); } out.sort(); for(p=out.begin();p!=out.end();p++) cout<<p->second<<" is the MaJia of "<<p->first<<endl; cout<<endl; } return 0; }