[Opening the crazy question farming age!] Uva247 floyd + dfs closure, uva247dfs
#include<bits/stdc++.h>using namespace std;map<string,int> cnt;vector<string> p(10000);int G[26][26];bool vis[26];int n,m;void dfs(int u){// if(vis[u]) return; vis[u]=1; for(int i=0;i<n;i++){ if(!vis[i]&&G[u][i]&&G[i][u]) { cout<< ", "<<p[i]; dfs(i); } } return ;}void init(){ memset(G,0,sizeof(G)); memset(vis,0,sizeof(vis)); cnt.clear(); p.clear();}void floyd(){ for(int k=0;k<n;k++) for(int i=0;i<n;i++) if(G[i][k]) for(int j=0;j<n;j++) if(G[k][j]) G[i][j]=1;//for(int i=0;i<n;i++){//for(int j=0;j<n;j++) cout<<G[i][j]<<" ";//printf("\n");////}}int main(){ int kase=0; while(~scanf("%d%d",&n,&m)&&n&&m){ init(); string a,b; int id=0; while(m--){ cin>>a>>b; if(!cnt.count(a)) { cnt[a]=id++; p.push_back(a); } if(!cnt.count(b)) { cnt[b]=id++; p.push_back(b); } G[ cnt[a] ][ cnt[b] ]=1; }// for(int i=0;i<n;i++){//for(int j=0;j<n;j++) cout<<G[i][j]<<" ";//printf("\n");////} if(kase>0) cout<<endl; floyd(); cout<<"Calling circles for data set "<<++kase<<":"<<endl; for(int i=0;i<n;i++){ if(!vis[i]){ cout<< p[i] ; dfs(i); cout<<endl; } } } return 0;}
Copyright Disclaimer: This article is an original article by the blogger and cannot be reproduced without the permission of the blogger.