UVA247CallingCircles

来源:互联网 发布:单片机继电器 编辑:程序博客网 时间:2024/06/07 05:50
//UVA247CallingCircles#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<vector>#include<map>using namespace std;const int maxn = 25;int n, m, cnt = 0;bool vis[maxn], G[maxn][maxn];vector<string> ss;map<string, int> idd;void dfs(int u) {vis[u] = 1;for(int i = 0; i < n; i++) {if(!vis[i] && G[u][i] && G[i][u]) {printf(", %s", ss[i].c_str());dfs(i);}}}int id(const string& s) {if(idd.count(s) == 0) {    idd[s] = cnt++;    ss.push_back(s); } return idd[s];}int main() {int kase = 0;while(scanf("%d%d", &n, &m) == 2 && n) {string s, s2;cnt = 0;memset(G, 0, sizeof(G));memset(vis, 0, sizeof(vis));ss.clear();        idd.clear();for(int i = 0; i < m; i++) {    cin >> s >> s2;    G[id(s)][id(s2)] = true;}for(int k = 0; k < n; k++)     for(int i = 0; i < n; i++)         for(int j = 0; j < n; j++)             G[i][j] |= G[i][k] & G[k][j];    if(kase) printf("\n");printf("Calling circles for data set %d:\n", ++kase);for(int i = 0; i < n; i++) {    if(!vis[i]) {     printf("%s", ss[i].c_str());    dfs(i);printf("\n");} }}return 0;} /*5 6Ben AlexanderAlexander DollyDolly BenDolly BenedictBenedict DollyAlexander Aaron14 34John AaronAaron BenedictBetsy JohnBetsy RingoRingo DollyBenedict PaulJohn BetsyJohn AaronBenedict GeorgeDolly RingoPaul MarthaGeorge BenAlexander GeorgeBetsy RingoAlexander StephenMartha StephenBenedict AlexanderStephen PaulBetsy RingoQuincy MarthaBen PatrickBetsy RingoPatrick StephenPaul AlexanderPatrick BenStephen QuincyRingo BetsyBetsy BenedictBetsy BenedictBetsy BenedictBetsy BenedictBetsy BenedictBetsy BenedictQuincy Martha0 0*/

原创粉丝点击