int main(int argc, char const *argv[]) { Grafo grafo; std::unordered_map<std::string, Grafo::Ref> mapa; std::string linha; while (std::cin >> linha) { if (linha.length() == 0) { continue; } size_t separador = linha.find('>'); if (separador == std::string::npos) { if (mapa.count(linha) == 0) { mapa[linha] = grafo.addVertice(linha); } } else { std::string primeiro = linha.substr(0, linha.find('>')); std::string segundo = linha.substr(linha.find('>')+1); if (mapa.count(primeiro) == 0) { mapa[primeiro] = grafo.addVertice(primeiro); } if (mapa.count(segundo) == 0) { mapa[segundo] = grafo.addVertice(segundo); } grafo.addAresta(mapa[primeiro], mapa[segundo]); } } if (argc == 2) { if (mapa.count(argv[1]) == 0) { std::cerr << "Erro!" << std::endl; std::cerr << "Não exite nó com o nome \"" << argv[1] << "\"!"; std::cerr << std::endl; return 1; } else { grafo.drawGraph(mapa[argv[1]], std::cout); return 0; } } else { std::cerr << "Erro!" << std::endl; if (argc < 2) { std::cerr << "Argumentos insuficientes"; } else { std::cerr << "Argumentos excedentes"; } std::cerr << std::endl; return 1; } }
int main(){ int n, m; float peso1, peso2, peso3; int origem, destino; // vértices para cada aresta; int id = 0; // id das arestas que leremos do arquivo para criar o grafo cin>>n; // quantidade de vértices do grafo; cin>>m; my_grafo.setN(n); Grafo relacao(m); // como a relacao se dá no conjunto de arestas, entao a quantidade de vértices do Grafo relacao será a mesma quantidade de arestas de my_grafo // contruir o grafo for (int i=0; i<n; i++){ // PADRAO : vértices numerados de 0 à n-1 my_grafo.addVertice(i); } for (id = 0; id<m; id++){ cin>>origem; cin>>destino; cin>>peso1; cin>>peso2; cin>>peso3; my_grafo.addAresta(id, origem, destino, peso1, peso2, peso3); } int nA = id; // quantidade de arestas do grafo //cout<<m<<endl; id = 0; for (int i=0; i<m; i++){ // PADRAO : vértices numerados de 0 à n-1 relacao.addVertice(i); } vector< pair<int, int> > relacao2; // primeira aresta domina a segunda while (cin>>origem){ cin>>destino; relacao.addArestaDirecionada(id++, origem, destino); // nao nos preocupamos com os pesos para o grafo relacao relacao2.push_back(make_pair(origem, destino)); // origem R destino } times(&tempsInit); // para medir o tempo em caso limite pthread_t thread_time; pthread_attr_t attr; int nnnnnnnn=0; if(pthread_create(&thread_time, NULL, &tempo, (void*)nnnnnnnn)){ // on criee efectivement la thread de rechaufage cout<<"Error to create the thread"<<endl; //exit(-1); exit(EXIT_FAILURE); } // //vector< int * > arvores = krukal_like(&my_grafo, relacao2); times(&tempsFinal); /* current time */ // clock final clock_t user_time1 = (tempsFinal.tms_utime - tempsInit.tms_utime); cout<<user_time1<<endl; cout<<(float) user_time1 / (float) sysconf(_SC_CLK_TCK)<<endl;//"Tempo do usuario por segundo : " cout<<"RESULTADO FINAL"<<endl; printResultado(); return 0; }