Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <fstream>
  5. #include <map>
  6. #include <sstream>
  7. #include <list>
  8. #include <math.h>
  9.  
  10. using namespace std;
  11.  
  12.  
  13. struct cso
  14. {
  15. public:
  16. string nev_cso;
  17. double d_cso;
  18. bool nyitvae = false ;
  19. string tar1;
  20. string tar2;
  21. bool switch_=false;
  22. };
  23.  
  24. struct cel
  25. {
  26. string cel_nev;
  27. string cel_nedv;
  28. int cel_V;
  29. };
  30.  
  31. struct tartaly
  32. {
  33. string nev_tart;
  34. double V;
  35. map<tartaly*,cso>szomsz;
  36. bool tisztae = true;
  37. string nedv;
  38. double V_nedv =0;
  39. double delta;
  40.  
  41. };
  42.  
  43. struct szabad_cso
  44. {
  45. tartaly* t1;
  46. tartaly* t2;
  47. cso ertek;
  48. };
  49.  
  50. struct halozat
  51. {
  52. vector<tartaly*>tartalyok;
  53. vector<cso>csovek;
  54. };
  55.  
  56. bool beolvas(string fnev, string knev, string cnev, halozat &graf, cel C)
  57. {
  58. tartaly T;
  59. string sor;
  60. ifstream bf;
  61. ifstream bk;
  62. ifstream bc;
  63.  
  64. bc.open(cnev.c_str(), ifstream::in);
  65. bf.open(fnev.c_str(), ifstream::in);
  66. bk.open(knev.c_str(), ifstream::in);
  67. if(!bf.good()) return false;
  68. stringstream ss;
  69.  
  70. while( getline(bf, sor) && sor != "-")
  71.  
  72. {
  73.  
  74. int temp;
  75. ss.clear();
  76. ss << sor;
  77. sor = "";
  78.  
  79. ss >> T.nev_tart;
  80. ss >> T.V;
  81.  
  82. graf.tartalyok.push_back(new tartaly(T));
  83.  
  84. }
  85.  
  86. cso CS;
  87. szabad_cso SZ;
  88. while( getline(bf,sor))
  89. {
  90. ss.clear();
  91. ss << sor;
  92. sor = "";
  93.  
  94.  
  95. ss >> CS.nev_cso;
  96. ss >> CS.d_cso;
  97. ss >> CS.tar1;
  98. ss >> CS.tar2;
  99.  
  100. CS.nyitvae=false;
  101.  
  102. graf.csovek.push_back(CS);
  103. SZ.ertek.nev_cso = CS.nev_cso;
  104. SZ.ertek.d_cso = CS.d_cso;
  105.  
  106. for (int i=0; i<graf.tartalyok.size(); i++)
  107. {
  108.  
  109. if (graf.tartalyok[i]->nev_tart == CS.tar1 )
  110. {
  111. SZ.t1 = graf.tartalyok[i];
  112. for (int j=0; j<graf.tartalyok.size(); j++)
  113. {
  114. if (graf.tartalyok[j]->nev_tart == CS.tar2)
  115. {
  116. graf.tartalyok[i]->szomsz.insert(pair<tartaly*,cso>(graf.tartalyok[j],CS));
  117. SZ.t2 = graf.tartalyok[j];
  118.  
  119.  
  120.  
  121. }
  122. }
  123. }
  124.  
  125. if (graf.tartalyok[i]->nev_tart == CS.tar2 )
  126. {
  127. for (int j=0; j<graf.tartalyok.size(); j++)
  128. {
  129. if (graf.tartalyok[j]->nev_tart == CS.tar1)
  130. {
  131. graf.tartalyok[i]->szomsz.insert(pair<tartaly*,cso>(graf.tartalyok[j],CS));
  132.  
  133.  
  134. }
  135. }
  136. }
  137.  
  138. /// graf.csovek.push_back(SZ);
  139.  
  140. }
  141. /* for (int i=0; i<graf.csovek.size();i++)
  142. {
  143. for (int j=i+1; j<graf.csovek.size();j++)
  144. {
  145. if (graf.csovek[i].ertek.nev_cso == graf.csovek[j].ertek.nev_cso)
  146. graf.csovek.erase(graf.csovek.begin()+j);
  147. }
  148.  
  149. }*/
  150. }
  151.  
  152. if(!bk.good()) return false;
  153.  
  154.  
  155. while(getline(bk,sor))
  156. {
  157. string temp_nedv;
  158. int temp_V = 0;
  159. ss.clear();
  160. ss << sor;
  161. sor = "";
  162.  
  163.  
  164. ss >> temp_nedv;
  165. ss >> sor;
  166. ss >> temp_V;
  167.  
  168. //cout << temp_nedv << endl;
  169.  
  170. for (int i=0; i<graf.tartalyok.size(); i++)
  171. {
  172. if (graf.tartalyok[i]->nev_tart == sor)
  173. {
  174. graf.tartalyok[i]->nedv = temp_nedv;
  175. graf.tartalyok[i]->V_nedv = temp_V;
  176. //cout<<" "<<graf.tartalyok[i]->nev_tart<<" ";
  177. graf.tartalyok[i]->tisztae = false;
  178. }
  179. }
  180.  
  181.  
  182. }
  183.  
  184. sor= "";
  185.  
  186. while (getline(bc,sor))
  187. {
  188. sor= "";
  189. ss.clear();
  190. ss << sor;
  191.  
  192. ss >> C.cel_nedv;
  193. ss >> C.cel_nev;
  194. ss >> C.cel_V;
  195.  
  196. }
  197.  
  198.  
  199. return true;
  200.  
  201.  
  202. }
  203.  
  204. void kiir(halozat &graf)
  205. {
  206. for (int i=0; i<graf.tartalyok.size(); i++)
  207. {
  208. cout << graf.tartalyok[i]->nev_tart << endl;
  209. }
  210.  
  211. for (int i=0; i<graf.csovek.size(); i++)
  212. {
  213. cout << graf.csovek[i].nev_cso << " | nyitvae: "<< graf.csovek[i].nyitvae << " | switch: " << graf.csovek[i].switch_ << endl;
  214. }
  215. }
  216.  
  217.  
  218. vector<vector<double>> createflowmatrix(halozat& graf)
  219. {
  220. vector<vector<double>> flowmatrix ;
  221.  
  222. int k= 0;
  223. vector<double> flows;
  224. for(int i=0; i<graf.tartalyok.size();i++)
  225. {
  226.  
  227. for (int j=0; j<graf.csovek.size();j++)
  228. {
  229. if (graf.tartalyok[i]->nev_tart == graf.csovek[j].tar1)
  230. {
  231. if (graf.csovek[j].nyitvae == true )
  232. {
  233. if (graf.csovek[j].switch_ == false) flows.push_back(-graf.csovek[j].d_cso);
  234. if (graf.csovek[j].switch_ == true) flows.push_back(graf.csovek[j].d_cso);
  235. }
  236. if (graf.csovek[j].nyitvae == false ) flows.push_back(0);
  237. }
  238. if (graf.tartalyok[i]->nev_tart == graf.csovek[j].tar2)
  239. {
  240. if (graf.csovek[j].nyitvae == true )
  241. {
  242. if (graf.csovek[j].switch_ == true) flows.push_back(-graf.csovek[j].d_cso);
  243. if (graf.csovek[j].switch_ == false) flows.push_back(graf.csovek[j].d_cso);
  244. }
  245. if (graf.csovek[j].nyitvae == false ) flows.push_back(0);
  246. }
  247.  
  248. if(graf.tartalyok[i]->nev_tart != graf.csovek[j].tar1 && graf.tartalyok[i]->nev_tart != graf.csovek[j].tar2)
  249. {
  250. flows.push_back(0);
  251. }
  252.  
  253. }
  254. flowmatrix.push_back(flows);
  255. flows.clear();
  256. }
  257.  
  258.  
  259. for (int i=0; i<flowmatrix.size();i++)
  260. {
  261. for (int j=0; j<flowmatrix[i].size(); j++)
  262. {
  263. cout << flowmatrix[i][j] << "|";
  264. }
  265. cout << endl;
  266. }
  267.  
  268. return flowmatrix;
  269. }
  270.  
  271. void step ( halozat& graf, vector<vector<double>> flowmatrix, int time)
  272. {
  273.  
  274. vector<double> sum(graf.tartalyok.size(),0);
  275.  
  276.  
  277.  
  278. double t = time;
  279. double t_temp = 1-time;
  280. int keresett = 0;
  281.  
  282. for(int i=0; i<graf.tartalyok.size(); i++)
  283. {
  284. for(int j=0; j<graf.csovek.size(); j++)
  285. {
  286. sum[i]=flowmatrix[i][j] + sum[i];
  287. }
  288. }
  289. for(int i=0; graf.tartalyok.size(); i++)
  290. {
  291. if(sum[i] != 0)
  292. {
  293. if(sum[i]>0 && t_temp > (graf.tartalyok[i]->V - graf.tartalyok[i]->V_nedv)/sum[i]) {t_temp = (graf.tartalyok[i]->V - graf.tartalyok[i]->V_nedv)/sum[i]; keresett = i;}
  294. if(sum[i]<0 && t_temp > (0 - graf.tartalyok[i]->V_nedv)/sum[i]) {t_temp = (0 - graf.tartalyok[i]->V_nedv)/sum[i]; keresett = i;}
  295. }
  296. }
  297. if(t+t_temp == 1)
  298. {
  299. for(int i=0 ;i <graf.tartalyok.size();i++)
  300. {
  301. graf.tartalyok[i]->V_nedv += sum[i]*t_temp;
  302. }
  303. return;
  304. }
  305.  
  306. else
  307. {
  308. for(int i = 0; i<graf.tartalyok.size();i++)
  309. {
  310. graf.tartalyok[i]->V_nedv += sum[i]*t_temp;
  311. }
  312. }
  313. double poz[graf.csovek.size()];
  314. int alfa = 1;
  315. double sumt = sum[keresett];
  316.  
  317. if(sum[keresett]<0)
  318. {
  319. alfa = -1;
  320. }
  321. for(int i=0; i<graf.csovek.size();i++)
  322. {
  323. if(flowmatrix[keresett][i]*alfa > 0)
  324. {
  325. poz[i]=flowmatrix[keresett][i];
  326. sumt = sumt-poz[i];
  327. }
  328. }
  329. if(sumt = 0)
  330. {
  331. for (int i=0; i<graf.csovek.size();i++)
  332.  
  333. {
  334. if(flowmatrix[keresett][i] != 0)
  335. {
  336. if( graf.csovek[i].tar1 == graf.tartalyok[keresett]->nev_tart)
  337. {
  338.  
  339. for(int j=0; j<graf.tartalyok.size();j++)
  340. {
  341. if(graf.tartalyok[j]->nev_tart == graf.csovek[i].tar2)
  342. {
  343. flowmatrix[keresett][i]=0;
  344. flowmatrix[j][i]=0;
  345. }
  346. }
  347. }
  348. else
  349. {
  350. for(int j=0; j<graf.tartalyok.size();j++)
  351. {
  352. if(graf.tartalyok[j]->nev_tart == graf.csovek[i].tar1)
  353. {
  354. flowmatrix[keresett][i]=0;
  355. flowmatrix[j][i]=0;
  356. }
  357. }
  358. }
  359. }
  360. }
  361. step(graf, flowmatrix, t+t_temp);
  362. }
  363. else
  364. { alfa = 1;
  365. double sumt2;
  366. vector<int>index;
  367.  
  368. if (sumt < 0) alfa=-1;
  369.  
  370. for(int i= 0; i< graf.csovek.size(); i++)
  371. {
  372. if ( flowmatrix[keresett][i]*alfa > 0 )
  373. {
  374. sumt2=+flowmatrix[keresett][i];
  375. index.push_back(i);
  376.  
  377. }
  378. }
  379.  
  380. for(int i=0; i<index.size();i++)
  381. {
  382. if (graf.csovek[index[i]].tar1 == graf.tartalyok[keresett]->nev_tart)
  383. {
  384. for (int j=0; j<graf.tartalyok.size();j++)
  385. {
  386. if(graf.csovek[index[i]].tar2 == graf.tartalyok[j]->nev_tart)
  387. {
  388. flowmatrix[keresett][index[i]] = ((sumt2-sum[keresett])/sumt2)*flowmatrix[keresett][index[i]];
  389. flowmatrix[j][index[i]] = ((sumt2-sum[keresett])/sumt2)*flowmatrix[j][index[i]];
  390. }
  391. }
  392. }
  393. }
  394. step(graf,flowmatrix,t+t_temp);
  395. }
  396.  
  397. }
  398.  
  399.  
  400. int main()
  401. {
  402.  
  403. halozat graf;
  404. cel C;
  405. vector<vector<double>>flowmatrix;
  406. beolvas("rendszer2.txt","kezdeti2.txt","celallapot",graf,C);
  407.  
  408.  
  409.  
  410.  
  411. string command;
  412. string name;
  413. string dest;
  414. ifstream initcommand("Command1.txt");
  415. while(initcommand.good())
  416. { int i=0;
  417. initcommand >> command;
  418.  
  419. if(command == "step")
  420. {
  421. int time = 0;
  422. vector<vector<double>> flowmatrix = createflowmatrix(graf);
  423. step(graf,flowmatrix,time);
  424. }
  425. if(command == "off")
  426. {
  427. initcommand >> name;
  428. while(graf.csovek[i].nev_cso != name)
  429. {
  430. i++;
  431. }
  432. graf.csovek[i].nyitvae = false;
  433. }
  434. if(command == "on")
  435. {
  436. initcommand >> name;
  437.  
  438. for (int i=0; i<graf.csovek.size(); i++)
  439. {
  440. if(graf.csovek[i].nev_cso == name)
  441. {
  442.  
  443. graf.csovek[i].nyitvae = true;
  444.  
  445. initcommand >> dest;
  446.  
  447. if(graf.csovek[i].switch_ == true && dest == graf.csovek[i].tar1) graf.csovek[i].nyitvae = true;
  448. else if(graf.csovek[i].switch_ == true && dest == graf.csovek[i].tar2){ graf.csovek[i].nyitvae = true; graf.csovek[i].switch_ = false;}
  449. else if(graf.csovek[i].switch_ == false && dest == graf.csovek[i].tar2) graf.csovek[i].nyitvae = true;
  450. else if(graf.csovek[i].switch_ == false && dest == graf.csovek[i].tar1) {graf.csovek[i].nyitvae = true; graf.csovek[i].switch_ = true;}
  451. else cout << "hibas parancs";
  452. }
  453. }
  454. }
  455. if(command == "clean")
  456. {
  457. initcommand >> name;
  458.  
  459. while(graf.tartalyok[i]->nev_tart != name)
  460. {
  461. i++;
  462. }
  463. if (graf.tartalyok[i]->V_nedv == 0)
  464. {
  465. for(int i=0; i<graf.csovek.size(); i++)
  466. {
  467. if(graf.csovek[i].tar1 == name or graf.csovek[i].tar2 == name)
  468. graf.csovek[i].nyitvae = false;
  469. }
  470. graf.tartalyok[i]->tisztae = true;
  471. }
  472. }
  473. }
  474.  
  475.  
  476.  
  477. kiir(graf);
  478. return 0;
  479.  
  480. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement