解题思路:
看了下别人的大致思路,知道可以用拓扑排序,即每一次输出入度为0的。用到了map,map的删除是在是坑。
注意事项:
参考代码:
#include <iostream> #include <string> #include <map> using namespace std; map<string,int> si;//string为人名,int为该人的入度数即前面女人的个数 int main() { int T,n,i; cin>>T; while(T!=0){ si.clear(); cin>>n; string **str = new string*[n]; for(i=0;i<n;i++) str[i] = new string[2]; for(i=0;i<n;i++){ cin>>str[i][0]>>str[i][1]; if(!si.count(str[i][0])){//判断map中是否有该人 si[str[i][0]]=0; } if(!si.count(str[i][1])){ si[str[i][1]]=1; }else{ si[str[i][1]]++; } } while(si.size()){ map<string,int>::iterator iter = si.begin(); while(1){ if(iter->second == 0){//前面没人(入度为0)就输出 cout<<iter->first<<" "; for(i=0;i<n;i++){ if(str[i][0]==iter->first){ si[str[i][1]]--;//在她之后的入度都减一 } } si.erase(iter->first); break; }else{ iter++; } } } cout<<endl; T--; } return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:602 |
C语言程序设计教程(第三版)课后习题9.2 (C语言代码)浏览:741 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:717 |
printf基础练习2 (C语言代码)浏览:826 |
剪刀石头布 (C语言代码)浏览:1792 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:539 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:350 |
1157题解浏览:769 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:585 |
核桃的数量 (C语言代码)浏览:893 |