Está en la página 1de 2

#include<iostream> #include<queue> #include<sstream> #include<stdio.

h> #include<vector> #include<map> using namespace std; map<string,int> dist; map<string,int> nombre; map<int,string> numero; map<string,int>:: iterator it; typedef pair<int,int> ii; typedef vector<ii> vii; vector<vii> ListAdy; void bfs(void){ string origen = "Erdos, P."; int nodoOrigen=nombre[origen],i; queue<int> cola; cola.push(nodoOrigen); dist[origen]=0; while(!cola.empty()){ int nodo=cola.front(); string nameOrigen = numero[nodo]; cola.pop(); for(int i=0;i<ListAdy[nodo].size();i++){ string name=numero[ListAdy[nodo][i].first]; if(dist[name]==-1){ cola.push(ListAdy[nodo][i].first); dist[name]=dist[nameOrigen]+1; } } } return; } string procesar(string res){ int i; bool borrar=false; string cad=res; for(i=0;i<cad.size();i++) if(cad[i]==' ') cad[i]='$'; for(i=1;i<cad.size();i++){ if(cad[i]==':') borrar=true; if(borrar==true) cad[i]=' '; else if(borrar==false && cad[i]==',' && cad[i-1]=='.') cad[i]=' '; } return cad; } string cambio(string cad){ for(int i=0;i<cad.size();i++) if(cad[i]=='$')

cad[i]=' '; while(cad[0]==' ') cad.erase(cad.begin()); return cad; } int main(void){ int casos,publi,consultas,n; string renglon,name; vector<string> relacion; scanf("%d",&casos); for(int T=1;T<=casos;T++){ ListAdy.clear(); scanf("%d%d",&publi,&consultas); getline(cin,renglon); nombre.clear(); numero.clear(); n=0; while(publi--){ getline(cin,renglon); renglon=procesar(renglon); istringstream in(renglon); relacion.clear(); while(in >> name){ name=cambio(name); if(nombre.find(name)==nombre.end()){ nombre[name]=n; numero[n]=name; n++; dist[name]=-1; ListAdy.push_back(vii()); } relacion.push_back(name); } for(int i=0;i<relacion.size();i++) for(int j=0;j<relacion.size();j++) if(i!=j) ListAdy[nombre[relacion[i]]].pus h_back(make_pair(nombre[relacion[j]],1)); } printf("Scenario %d\n",T); bfs(); while(consultas--){ getline(cin,renglon); if(dist.find(renglon)==dist.end() || dist[renglon]==-1) printf("%s infinity\n",renglon.c_str()); else printf("%s %d\n",renglon.c_str(),dist[renglon]); } } return 0; }

También podría gustarte