void MainWindow::on_BTNkruskal_clicked() { layout->removeWidget(label); kruskal.resolver(); kruskal.print(); layout->addWidget(label); }
int main(int argc, char** argv) { if (argc != 2) { printUsage(); return 0; } Kruskal kruskal; if (!kruskal.loadGraphFromFile(argv[1])) { cout << "Cannot load data from " << argv[1] << "\n"; return 0; } //cout << "original graph:\n"; //kruskal.printGraphAsMatrix(); graphUtils::GraphAsMatrix mst = kruskal.getMinimumSpanningTree(); //cout << "MST graph:\n"; //utils::printGraphAsMatrix(mst); int originalGraphWeight = kruskal.getGraphWeight(); int mstWeight = graphUtils::getGraphWeight(mst); graphUtils::printGraphAsMatrixToFile("kruskal.out", mst); cout << "original weight: " << originalGraphWeight << " mst weight: " << mstWeight << " saving: " << (originalGraphWeight - mstWeight) << "\n"; return 0; }
///求小于等于k度的最小限度生成树,返回生成树大小,-1表示无法完成! int k_degree_mst(int n, int k) { ///定点数[0, n) 包含度限制的那个点。要限制的度数k if(E0.size() < k) k = E0.size(); /**如果要求正好是k度,换成这个 if(E0.size() < k) { result = -1; return -1; } */ kr.kruskal(n); tmpE0.clear(); result = kr.result; int part = 0; sort(E0.begin(), E0.end()); for(I i = E0.begin(); i != E0.end(); i ++) { if(unio(v0, i->second) != -1){ kr.tree[v0].push_back(T(i->first, i->second)); kr.tree[i->second].push_back(T(i->first, v0)); part ++; result += i->first; } else { tmpE0.push_back(*i); } } if(part!=kr.part-1||part>k) return minResult=-1;//分别对应v0度不够、度大于限度 //初始化完毕 minResult = result; for(int i = 0; i < k-part; i ++) extend_degree(); return minResult; }
int main(int argc, char const *argv[]) { ios::sync_with_stdio(false); int t; Kruskal *K; cin >> t; for (int cs = 0; cs < t; ++cs) { int n; ll r; cin >> n >> r; VL x(n), y(n); K = new Kruskal(n); for (int i = 0; i < n; ++i) { cin >> x[i] >> y[i]; for (int j = 0; j < i; ++j) { K->addEdge(i, j, (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j])); } } vector <pair <ll, PI>> mst; K->MST(&mst); int state = 1; double road = 0.0, rail = 0.0; for (auto e : mst) { if (e.x <= r * r) { road += sqrt(double(e.x)); } else { rail += sqrt(double(e.x)); state++; } } cout << "Case #" << cs + 1 << ": " << state << ' ' << int(road + 0.5) << ' ' << int(rail + 0.5) << endl; } return 0; }
int _tmain(int argc, _TCHAR* argv[]) { string file = "adjacencyMatrix.txt"; Graph G; G.LoadGraph(file,1); cout<<"*********************************************************\n"; cout<<"\t\tVisit Graph\n"; cout<<"*********************************************************\n"; G.BreadthFirstSearch(); G.DepthFirstSearch(); string file2 = "weightedAdjacencyMatrix.txt"; G.LoadGraph(file2,2); cout<<"*********************************************************\n"; cout<<"\t\tMinimum spanning tree\n"; cout<<"*********************************************************\n"; Kruskal k; k.MSTKruskal(G.vertexNumber,G.weightedAdjacencyMatrix); Prim p; int startVertex = 0; p.MSTPrim(G.vertexNumber,G.weightedAdjacencyMatrix,startVertex); string file3 = "weightedDirectedGraph.txt"; G.LoadGraph(file3,3); cout<<"*********************************************************\n"; cout<<"\t\tSingle-source shortest path \n"; cout<<"*********************************************************\n"; Dijkstra d; d.SSSPDijkstra(G.vertexNumber,G.weightedDirectedAdjacencyMatrix,startVertex); return 0; }
void addEdge(int a, int b, int val) { if(a == v0 || b == v0) E0.push_back(T(val, a+b-v0));//a+b-v0即为另外一条边! else kr.addEdge(a, b, val); }
void init(int v0) { th(v0); E0.clear(); kr.init(); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); setWindowTitle("Map Path Simulator"); ui->mapa->setPixmap(QPixmap(":/Images/mapa.png")); layout = new QVBoxLayout(this); //for(int i = 0; i < 54; i++) //{ //label = new QLabel("hola"); //QString hola; //hola.append("hola"); //label->setText(hola); //layout->addWidget(label); //} ui->scrollAreaWidgetContents->setLayout(layout); Nodo * nodos[54]; nodos[0]=new Nodo("Santa Fe", 0); nodos[1]=new Nodo("San Jorge",1); nodos[2]=new Nodo("Nueva Ocotepeque", 2); nodos[3]=new Nodo("Copan Ruinas",3); nodos[4]=new Nodo("Santa Rosa de Copan", 4); nodos[5]=new Nodo("Florida", 5); nodos[6]=new Nodo("Gracias", 6); nodos[7]=new Nodo("Belen", 7); nodos[8]=new Nodo("San Andres", 8); nodos[9]=new Nodo("Trinidad", 9); nodos[10]=new Nodo("Ilama", 10); nodos[11]=new Nodo("Santa Barbara", 11); nodos[12]=new Nodo("La Esperanza", 12); nodos[13]=new Nodo("Dolores", 13); nodos[14]=new Nodo("San Antonio", 14); nodos[15]=new Nodo("Puerto Cortes", 15); nodos[16]=new Nodo("San Pedro Sula", 16); nodos[17]=new Nodo("Santa Cruz de Yojoa", 17); nodos[18]=new Nodo("Minas de Oro", 18); nodos[19]=new Nodo("Taulabe", 19); nodos[20]=new Nodo("Comayagua", 20); nodos[21]=new Nodo("La Paz", 21); nodos[22]=new Nodo("Santa Maria", 22); nodos[23]=new Nodo("Cabanas", 23); nodos[24]=new Nodo("Tela", 24); nodos[25]=new Nodo("Esparta", 25); nodos[26]=new Nodo("La Ceiba", 26); nodos[27]=new Nodo("El Progreso", 27); nodos[28]=new Nodo("Yoro", 28); nodos[29]=new Nodo("Olanchito", 29); nodos[30]=new Nodo("San Ignacio", 30); nodos[31]=new Nodo("San Juan de Flores", 31); nodos[32]=new Nodo("Tegucigalpa", 32); nodos[33]=new Nodo("Caridad", 33); nodos[34]=new Nodo("Nacaome", 34); nodos[35]=new Nodo("Amapala", 35); nodos[36]=new Nodo("San Isidro", 36); nodos[37]=new Nodo("Choluteca", 37); nodos[38]=new Nodo("El Triunfo",38); nodos[39]=new Nodo("Soledad", 39); nodos[40]=new Nodo("Yuscaran", 40); nodos[41]=new Nodo("Danli", 41); nodos[42]=new Nodo("Juticalpa", 42); nodos[43]=new Nodo("San Esteban", 43); nodos[44]=new Nodo("Catacamas", 44); nodos[45]=new Nodo("Balfate", 45); nodos[46]=new Nodo("Trujillo", 46); nodos[47]=new Nodo("Iriona", 47); nodos[48]=new Nodo("Brus Laguna", 48); nodos[49]=new Nodo("Ahuas", 49); nodos[50]=new Nodo("Puerto Lempira", 50); nodos[51]=new Nodo("Utila", 51); nodos[52]=new Nodo("Roatan", 52); nodos[53]=new Nodo("Guanaja", 53); nodos[0]->addArista(new Arista(2, 12.023)); nodos[1]->addArista(new Arista(2, 33.386)); nodos[1]->addArista(new Arista(4, 93.037)); nodos[2]->addArista(new Arista(0, 12.023)); nodos[2]->addArista(new Arista(1, 33.386)); nodos[3]->addArista(new Arista(4, 71.853)); nodos[3]->addArista(new Arista(5, 53.509)); nodos[4]->addArista(new Arista(1, 93.037)); nodos[4]->addArista(new Arista(3, 71.853)); nodos[4]->addArista(new Arista(5, 53.802)); nodos[4]->addArista(new Arista(6, 47.190)); nodos[5]->addArista(new Arista(3, 53.509)); nodos[5]->addArista(new Arista(4, 53.802)); nodos[5]->addArista(new Arista(9, 100.935)); nodos[6]->addArista(new Arista(4, 47.190)); nodos[6]->addArista(new Arista(7, 17.279)); nodos[7]->addArista(new Arista(6, 17.279)); nodos[7]->addArista(new Arista(12, 63.263)); nodos[8]->addArista(new Arista(13, 35.946)); nodos[8]->addArista(new Arista(14, 89.514)); nodos[9]->addArista(new Arista(5, 100.935)); nodos[9]->addArista(new Arista(10, 14.955)); nodos[9]->addArista(new Arista(16, 73.837)); nodos[10]->addArista(new Arista(9, 14.955)); nodos[10]->addArista(new Arista(11, 18.0)); nodos[11]->addArista(new Arista(10, 18.0)); nodos[11]->addArista(new Arista(19, 60.4)); nodos[12]->addArista(new Arista(7, 63.263)); nodos[12]->addArista(new Arista(13, 45.453)); nodos[12]->addArista(new Arista(22, 61.248)); nodos[13]->addArista(new Arista(8, 35.946)); nodos[13]->addArista(new Arista(12, 45.453)); nodos[13]->addArista(new Arista(14, 67.302)); nodos[14]->addArista(new Arista(8, 89.514)); nodos[14]->addArista(new Arista(13, 67.302)); nodos[15]->addArista(new Arista(16, 51.125)); nodos[16]->addArista(new Arista(9, 14.955)); nodos[16]->addArista(new Arista(15, 51.125)); nodos[16]->addArista(new Arista(27, 30.536)); nodos[17]->addArista(new Arista(19, 45.377)); nodos[17]->addArista(new Arista(27, 56.686)); nodos[18]->addArista(new Arista(28, 87.2)); nodos[19]->addArista(new Arista(11, 60.4)); nodos[19]->addArista(new Arista(17, 45.377)); nodos[19]->addArista(new Arista(20, 58.6)); nodos[20]->addArista(new Arista(19, 58.6)); nodos[20]->addArista(new Arista(21, 23.7)); nodos[20]->addArista(new Arista(32, 89.9)); nodos[21]->addArista(new Arista(20, 23.7)); nodos[21]->addArista(new Arista(22, 54.3)); nodos[22]->addArista(new Arista(12, 61.248)); nodos[22]->addArista(new Arista(21, 54.3)); nodos[22]->addArista(new Arista(23, 46.883)); nodos[23]->addArista(new Arista(22, 46.883)); nodos[24]->addArista(new Arista(27, 67.039)); nodos[24]->addArista(new Arista(25, 47.602)); nodos[25]->addArista(new Arista(24, 47.602)); nodos[25]->addArista(new Arista(26, 81.709)); nodos[26]->addArista(new Arista(25, 81.709)); nodos[26]->addArista(new Arista(45, 47.762)); nodos[26]->addArista(new Arista(52, 67.48)); nodos[27]->addArista(new Arista(16, 30.536)); nodos[27]->addArista(new Arista(17, 56.686)); nodos[27]->addArista(new Arista(24, 67.039)); nodos[27]->addArista(new Arista(28, 131)); nodos[28]->addArista(new Arista(18, 87.2)); nodos[28]->addArista(new Arista(27, 131)); nodos[28]->addArista(new Arista(29, 107)); nodos[28]->addArista(new Arista(30, 119)); nodos[29]->addArista(new Arista(28, 107)); nodos[29]->addArista(new Arista(45, 90.834)); nodos[30]->addArista(new Arista(28, 119)); nodos[30]->addArista(new Arista(31, 68.150)); nodos[30]->addArista(new Arista(42, 154.583)); nodos[31]->addArista(new Arista(30, 68.150)); nodos[31]->addArista(new Arista(32, 51.190)); nodos[32]->addArista(new Arista(20, 89.9)); nodos[32]->addArista(new Arista(31, 51.190)); nodos[32]->addArista(new Arista(34, 104.026)); nodos[32]->addArista(new Arista(40, 67.453)); nodos[33]->addArista(new Arista(34, 63.920)); nodos[34]->addArista(new Arista(32, 104.026)); nodos[34]->addArista(new Arista(33, 63.920)); nodos[34]->addArista(new Arista(35, 48.184)); nodos[34]->addArista(new Arista(36, 36.191)); nodos[34]->addArista(new Arista(37, 56.6)); nodos[35]->addArista(new Arista(34, 48.184)); nodos[36]->addArista(new Arista(34, 36.191)); nodos[37]->addArista(new Arista(34, 56.6)); nodos[37]->addArista(new Arista(38, 40.3)); nodos[37]->addArista(new Arista(39, 46.4)); nodos[38]->addArista(new Arista(37, 40.3)); nodos[39]->addArista(new Arista(37, 46.4)); nodos[40]->addArista(new Arista(32, 67.453)); nodos[40]->addArista(new Arista(41, 63.925)); nodos[41]->addArista(new Arista(40, 63.925)); nodos[42]->addArista(new Arista(30, 154.583)); nodos[42]->addArista(new Arista(43, 107.091)); nodos[42]->addArista(new Arista(44, 44.010)); nodos[43]->addArista(new Arista(42, 107.091)); nodos[43]->addArista(new Arista(46, 125.806)); nodos[43]->addArista(new Arista(47, 172.791)); nodos[44]->addArista(new Arista(42, 44.010)); nodos[45]->addArista(new Arista(26, 47.762)); nodos[45]->addArista(new Arista(29, 90.834)); nodos[45]->addArista(new Arista(46, 132.361)); nodos[46]->addArista(new Arista(43, 125.806)); nodos[46]->addArista(new Arista(45, 132.361)); nodos[46]->addArista(new Arista(47, 124.621)); nodos[47]->addArista(new Arista(43, 172.791)); nodos[47]->addArista(new Arista(46, 124.621)); nodos[47]->addArista(new Arista(48, 62.56)); nodos[48]->addArista(new Arista(47, 62.56)); nodos[48]->addArista(new Arista(49, 37.67)); nodos[49]->addArista(new Arista(48, 37.67)); nodos[49]->addArista(new Arista(50, 66.80)); nodos[50]->addArista(new Arista(49, 66.80)); nodos[51]->addArista(new Arista(52, 49.08)); nodos[52]->addArista(new Arista(26, 67.48)); nodos[52]->addArista(new Arista(51, 49.08)); nodos[52]->addArista(new Arista(53, 70.96)); nodos[53]->addArista(new Arista(52, 70.96)); sps.setX(235);sps.setY(280-20); santacruzdeyojoa.setX(266);santacruzdeyojoa.setY(355-20); puertocortes.setX(258);puertocortes.setY(233-20); progreso.setX(275);progreso.setY(322-20); yoro.setX(370);yoro.setY(342-20); olanchito.setX(459);olanchito.setY(288-20); tela.setX(291);tela.setY(241-20); esparta.setX(352);esparta.setY(250-20); ceiba.setX(424);ceiba.setY(243-20); balfate.setX(507);balfate.setY(248-20); trujillo.setX(554);trujillo.setY(222-20); iriona.setX(683);iriona.setY(226-20); sanesteban.setX(595);sanesteban.setY(302-20); juticalpa.setX(490);juticalpa.setY(377-20); catacamas.setX(630);catacamas.setY(427-20); danli.setX(493);danli.setY(511-20); soledad.setX(378);soledad.setY(586-20); yuscaran.setX(415);yuscaran.setY(533-20); sanisidro.setX(342);sanisidro.setY(582-20); choluteca.setX(360);choluteca.setY(632-20); eltriunfo.setX(389);eltriunfo.setY(668-20); nacaome.setX(316);nacaome.setY(598-20); amapala.setX(289);amapala.setY(638-20); caridad.setX(287);caridad.setY(559-20); santamaria.setX(247);santamaria.setY(498-20); lapaz.setX(287);lapaz.setY(473-20); cabanas.setX(240);cabanas.setY(527-20); dolores.setX(192);dolores.setY(490-20); laesperanza.setX(210);laesperanza.setY(476-20); sanantonio.setX(167);sanantonio.setY(536-20); sanandres.setX(173);sanandres.setY(502-20); gracias.setX(151);gracias.setY(431-20); belen.setX(158);belen.setY(451-20); sanjorge.setX(71);sanjorge.setY(427-20); ocotepeque.setX(56);ocotepeque.setY(451-20); santafe.setX(36);santafe.setY(450-20); santarosadecopan.setX(118);santarosadecopan.setY(398-20); florida.setX(108);florida.setY(339-20); copanruinas.setX(69);copanruinas.setY(381-20); trinidad.setX(195);trinidad.setY(312-20); santabarbara.setX(203);santabarbara.setY(375-20); ilama.setX(192);ilama.setY(338-20); taulabe.setX(241);taulabe.setY(405-20); comayagua.setX(295);comayagua.setY(455-20); minasdeoro.setX(305);minasdeoro.setY(366-20); sanignacio.setX(382);sanignacio.setY(387-20); sanjuandeflores.setX(411);sanjuandeflores.setY(476-20); tegucigalpa.setX(358);tegucigalpa.setY(510-20); roatan.setX(457);roatan.setY(155-20); utila.setX(399);utila.setY(192-20); guanaja.setX(557);guanaja.setY(132-20); bruslaguna.setX(766);bruslaguna.setY(246-20); puertolempira.setX(880);puertolempira.setY(323-20); ahuas.setX(799);ahuas.setY(279-20); for(int i = 0; i < 54; i++) { //QString temp = QString(nodos[i]->ciudad); ui->DBsrc->addItem(QString::fromStdString(nodos[i]->ciudad)); ui->DBdest->addItem(QString::fromStdString(nodos[i]->ciudad)); } for(int i = 0; i < 54; i++) { dijkstra.agregarNodo(nodos[i]); floyd.agregarNodo(nodos[i]); kruskal.addNodo(nodos[i]); } }