#include #include #include #include #include #include #include #include using namespace std; #define MAXM 7000 /* Náhodné cislo z intervalu [0, 1) */ double randdouble() { return rand()/(double(RAND_MAX)+1); } struct Mesto { int x; int y; }; struct Val { long double d; int i; bool operator<(const Val &v) const { return d < v.d; } }; char line[1024]; long double dd[MAXM][MAXM]; vector D[MAXM]; bool navstiven[MAXM]; long double F[MAXM][MAXM]; long double B[MAXM][MAXM]; long double R = 0.5; long double alpha = 2; long double beta = 2; int N = 1000; int ITERACE = 1000; int K = 10; int M = 0; Mesto mesta[MAXM]; int best = 1000000000; vector mravenci_cesta() { int navstiveno = 0; for (int i=0; i res; res.push_back(akt); while (navstiveno v; for (int a=0; a pst; for (int i : v) { pst[i] = pow(F[akt][i], alpha) * pow(B[akt][i], beta); total += pst[i]; } double x = randdouble() * total; int dalsi = -1; for (int i : v) { x -= pst[i]; if (x<0) { dalsi = i; break; } } navstiven[dalsi] = true; navstiveno++; res.push_back(dalsi); akt = dalsi; } return res; } vector delky_cest(vector > &mravenci) { vector L; for (int i=0; i > &mravenci, vector &L) { for (int i=0; i> k >> tmp; vector > mravenci; for (int i=0; i m; for (int j=0; j> x; m.push_back(x); } mravenci.push_back(m); } ifs.close(); vector L = delky_cest(mravenci); vypust_feromony(mravenci, L); } int main() { srand(123456789); // Nacti mesta ifstream ifs("obce-data.txt"); int tmp; while (ifs >> tmp) { ifs >> mesta[M].x >> mesta[M].y; ifs.getline(line, 1024); M++; } ifs.close(); // Spocitej vzdalenosti long double minD = 1000000000; long double maxD = 0; for (int i=0; i > mravenci; for (int i=0; i L = delky_cest(mravenci); // Vypust feromony vypust_feromony(mravenci, L); cout << best << endl; } return 0; }