Advertisement
migonne

jednak to dziala a tamto tak se

Feb 20th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.44 KB | None | 0 0
  1.  
  2.  
  3.  
  4. #include <iostream>
  5. #include <cmath>
  6. #include <cstdlib>
  7. #include <windows.h>
  8. #include <time.h>
  9. #include <fstream>
  10. #include <string>
  11. #include <sstream>
  12. #include <vector>
  13. #include <algorithm>
  14. #include <iomanip>
  15.  
  16.  
  17. using namespace std;
  18.  
  19. struct Wierzcholek
  20. {
  21. string sek_wierzch; //fragment z sekwencji, ktory jest wierzcholkiem
  22. int pozycja; // pozycja wierzcholka w sekwencji
  23. vector<int> jakosc; // qual
  24. int nrsek; //sekwencja, z ktorej pochodzi podciag
  25. int stwierzch; //stopien wierzcholka;
  26.  
  27. };
  28.  
  29.  
  30. int okno=7; //przykladowe wartosci
  31. int wiarygodnosc=19;
  32.  
  33. vector<string> sekwencja;
  34. vector<string> jakosc_sek;
  35. vector<Wierzcholek*> wierzcholki;
  36. vector<int> klika;
  37. vector<int> maxklika;
  38. vector< vector<int> > wektor_kliki;
  39. vector < vector < int > > polaczenia;
  40. int **macierz_polaczenia;
  41.  
  42.  
  43. void odczyt_pliku()
  44. {
  45. fstream fasta;
  46. fstream qual;
  47. string linia="";
  48. string linia2="";
  49.  
  50. fasta.open( "sample.fasta");
  51.  
  52. if( fasta.good() == true )
  53. {
  54. cout<<"Uzyskano dostep do pliku fasta "<<endl;
  55.  
  56. while(getline(fasta,linia))
  57. {
  58. if(linia[0] != '>')
  59. {
  60. sekwencja.push_back(linia);
  61.  
  62. }
  63. }
  64. fasta.close();
  65.  
  66. }
  67. else cout << "Dostep do pliku fasta zostal zabroniony!" << endl;
  68.  
  69.  
  70.  
  71. qual.open( "sample.qual");
  72.  
  73. if( qual.good() == true )
  74. {
  75. cout<<"Uzyskano dostep do pliku qual"<<endl;
  76.  
  77. while(getline(qual,linia2))
  78. {
  79. if(linia2[0] != '>')
  80. {
  81. jakosc_sek.push_back(linia2);
  82.  
  83. }
  84. }
  85. qual.close();
  86.  
  87. }
  88. else cout << "Dostep do pliku qual zostal zabroniony!" << endl;
  89.  
  90.  
  91.  
  92. }
  93.  
  94. void rozdzielacz_wierzcholki()
  95.  
  96. {
  97. for(int i = 0; i < sekwencja.size(); i++) //iterowanie po wektorze sekwencji (tzn po kazdym elemencie wektora, czyli po wszystkich jego sekwencjach)
  98. {
  99. string pomsek = sekwencja[i]; //zmienna pomocnicza, ktora jest aktualnie przetwarzana sekwencja
  100. int dlpomsek = pomsek.length()-1;
  101.  
  102. string s = jakosc_sek[i];
  103. vector<string> jakosc_sek_pom;
  104.  
  105. char delim=' ';
  106. std::stringstream ss(s);
  107. std::string token;
  108. while(std::getline(ss, token, delim))
  109. {
  110. jakosc_sek_pom.push_back(token);
  111. cout<<token<<" ";
  112. }
  113.  
  114. for(int i=0; i<jakosc_sek_pom.size();i++)
  115. {
  116. cout<<jakosc_sek_pom[i]<<";";
  117. }
  118.  
  119. //jakosc_sek[i];
  120.  
  121.  
  122. for(int j=0; j<=dlpomsek-okno+1;j++) //budowane na podstawie prototypowej funkcji rozdzielacz
  123. {
  124. Wierzcholek *wierzcholek = new Wierzcholek;
  125.  
  126. wierzcholek->sek_wierzch = pomsek.substr(j,okno); //podciag bedacy wierzcholkiem
  127. wierzcholek->pozycja = j; // pozycja wierzcholka w sekwencji
  128. wierzcholek->nrsek = i; //index sekwencji do ktorej nalezy wierzcholek
  129.  
  130. for(int k=j; k<(okno+j); k++)
  131. {
  132. int jksc = atoi( jakosc_sek_pom[k].c_str() );
  133. wierzcholek->jakosc.push_back(jksc);
  134. }
  135. wierzcholki.push_back(wierzcholek);
  136. }
  137. }
  138.  
  139.  
  140. // wyswietlanie
  141.  
  142. // for(int i=0; i<20;i++)
  143. for(int i=0; i<wierzcholki.size();i++)
  144. {
  145.  
  146. cout<<"wierzcholek "<<wierzcholki[i]->sek_wierzch<<" ";
  147. cout<<"pozycja "<<wierzcholki[i]->pozycja<<" ";
  148. cout<<"nr sekwencji "<<wierzcholki[i]->nrsek<<" ";
  149. //vector<int> pom=wierzcholki[i]->jakosc;
  150. cout<<"jakosc ";
  151. for(int j=0; j<okno;j++)
  152. {
  153. cout<<wierzcholki[i]->jakosc[j]<< " ";
  154. }
  155. //cout<<wierzcholki[i]->nrsek<<" ";
  156. cout<<endl;
  157.  
  158.  
  159. //cout<<wierzcholki[i]->sek_wierzch;
  160.  
  161.  
  162. }
  163.  
  164.  
  165. }
  166.  
  167. void polacz_wierzcholki()
  168. {
  169. /*
  170. polaczenia.resize(wierzcholki.size());
  171.  
  172. for(int i=0; i<polaczenia.size(); i++) // macierz wypelniamy zerami
  173. {
  174. for(int j=0; j<polaczenia.size(); j++)
  175. {
  176. polaczenia[i].push_back(0);
  177. }
  178.  
  179. }
  180.  
  181.  
  182. for(int i=0; i<polaczenia.size(); i++) // macierz wypelniamy zerami
  183. {
  184. for(int j=0; j<polaczenia.size(); j++)
  185. {
  186. cout<<polaczenia[i];
  187. }
  188.  
  189. }
  190. */
  191.  
  192.  
  193. // macierz.resize[wierzcholki.size()][wierzcholki.size()];
  194.  
  195.  
  196. cout<<" ROZMIAR WEKTORA WIERZCHOLKI***********"<<endl;
  197. cout<<wierzcholki.size()<<endl;
  198.  
  199. int rozmiarvwierz=wierzcholki.size();
  200.  
  201. macierz_polaczenia = new int *[rozmiarvwierz]; //przydzielamy pamiec na n wierszy
  202. for (int i=0; i<rozmiarvwierz; i++) // idzemy po macierzy
  203. {
  204. macierz_polaczenia[i] = new int[rozmiarvwierz]; //przydzielamy dla kazdego wiersza po n kolumn
  205. for (int j = 0; j <rozmiarvwierz; j++) //zerujemy wszystkie pola w macierzy
  206. macierz_polaczenia[i][j]=0;
  207. }
  208.  
  209. /*
  210. cout << " ";
  211. for(int i = 0; i < rozmiarvwierz; i++)
  212. cout << setw(3) << i;
  213.  
  214. cout << endl << endl;
  215.  
  216. for(int i = 0; i < rozmiarvwierz; i++){
  217. cout << setw(3) << i;
  218. for(int j = 0; j < rozmiarvwierz; j++)
  219. cout << setw(3) << macierz_polaczen[i][j];
  220. cout << endl;
  221. }
  222. cout << endl;
  223. */
  224.  
  225.  
  226. /*
  227.  
  228. polaczenia.resize(wierzcholki.size());
  229. for(int i=0; i<polaczenia.size(); i++) // wypelniamy macierz zerami
  230. for(int j=0; j<polaczenia.size(); j++)
  231. polaczenia[i].push_back(0);
  232.  
  233. */
  234.  
  235.  
  236. int delmax = (okno/2)-1;
  237.  
  238. for(int i=0; i<wierzcholki.size();i++)
  239. {
  240. for(int j=i+1; j<wierzcholki.size();j++)
  241. {
  242.  
  243. if(wierzcholki[i]->nrsek!=wierzcholki[j]->nrsek // jezeli podciag nie podchodzi z tej samej sekwencji
  244. && wierzcholki[i]->sek_wierzch==wierzcholki[j]->sek_wierzch) // oraz je¿eli podciagi sa takie same
  245. {
  246. macierz_polaczenia[i][j]=1;
  247. macierz_polaczenia[j][i]=1; // mozna polaczyc; ij oraz ji, bo przeciez krawedz nieskierowana
  248. }
  249.  
  250. else
  251. {
  252. if(wierzcholki[i]->nrsek!=wierzcholki[j]->nrsek) //podciagi z roznych sekwencji
  253. {
  254.  
  255. macierz_polaczenia[i][j]=1;
  256. macierz_polaczenia[j][i]=1;
  257.  
  258.  
  259. int delecjepom=0;
  260.  
  261. for(int k=0; k<okno;k++)
  262. {
  263. delecjepom++;
  264.  
  265. if(wierzcholki[i]->sek_wierzch[k] != wierzcholki[j]->sek_wierzch[k]) //gdy dwa nukleotydy nie sa takie tame
  266.  
  267. {
  268. if(delecjepom>delmax) // jesli przekroczono maksymalna ilosc delecji, to nie mozemy polaczyc
  269. {
  270. macierz_polaczenia[i][j]=0;
  271. macierz_polaczenia[j][i]=0;
  272. }
  273.  
  274. if(wierzcholki[i]->jakosc[k]>wiarygodnosc || wierzcholki[j]->jakosc[k]>wiarygodnosc) //jakosc ktoregos bedzie wieksza od wiarygodnosci to tez nie mozemy polaczyc
  275. {
  276. macierz_polaczenia[i][j]=0;
  277. macierz_polaczenia[j][i]=0;
  278. }
  279.  
  280. /* else // czyli moze wystapic polaczenie
  281. {
  282. macierz_polaczenia[i][j]=1;
  283. macierz_polaczenia[j][i]=1;
  284. //delecjepom++;
  285. } */
  286. }
  287. }
  288.  
  289. }
  290. }
  291. }
  292. }
  293.  
  294.  
  295. /*
  296.  
  297. cout << " ";
  298. for(int i = 0; i < rozmiarvwierz; i++)
  299. cout << setw(3) << i;
  300.  
  301. cout << endl << endl;
  302.  
  303. for(int i = 0; i < rozmiarvwierz; i++){
  304. cout << setw(3) << i;
  305. for(int j = 0; j < rozmiarvwierz; j++)
  306. cout << setw(3) << macierz_polaczenia[i][j];
  307. cout << endl;
  308. }
  309. cout << endl;
  310.  
  311. */
  312.  
  313. }
  314.  
  315.  
  316. void polacz_wierzcholki2()
  317. {
  318.  
  319. cout<<" ROZMIAR WEKTORA WIERZCHOLKI***********"<<endl;
  320. cout<<wierzcholki.size()<<endl;
  321.  
  322. int rozmiarvwierz=wierzcholki.size();
  323.  
  324. macierz_polaczenia = new int *[rozmiarvwierz]; //przydzielamy pamiec na n wierszy
  325. for (int i=0; i<rozmiarvwierz; i++) // idzemy po macierzy
  326. {
  327. macierz_polaczenia[i] = new int[rozmiarvwierz]; //przydzielamy dla kazdego wiersza po n kolumn
  328. for (int j = 0; j <rozmiarvwierz; j++) //zerujemy wszystkie pola w macierzy
  329. macierz_polaczenia[i][j]=0;
  330. }
  331.  
  332.  
  333. int max_deletion;
  334. if(okno == 4 || okno == 5)
  335. max_deletion = 1;
  336. if(okno == 6 || okno == 7)
  337. max_deletion = 2;
  338.  
  339. for(int i=0; i<wierzcholki.size(); i++)
  340. for(int j=i+1; j<wierzcholki.size(); j++)
  341. {
  342. if(wierzcholki[i]->sek_wierzch == wierzcholki[j]->sek_wierzch && wierzcholki[i]->nrsek != wierzcholki[j]->nrsek)
  343. {
  344. macierz_polaczenia[i][j] = 1;
  345. macierz_polaczenia[j][i] = 1;
  346. }
  347. else
  348. {
  349. if(wierzcholki[i]->nrsek != wierzcholki[j]->nrsek)
  350. {
  351. // zakladamy ze delecja
  352. macierz_polaczenia[i][j] = 1;
  353. macierz_polaczenia[j][i] = 1;
  354.  
  355. int tmp = 0;
  356. for(int y=0; y<okno; y++)
  357. {
  358. tmp++;
  359. if(wierzcholki[i]->sek_wierzch[y] != wierzcholki[j]->sek_wierzch[y]) // dla nukleotydu ktory sie nie zgadza
  360. {
  361. if(wierzcholki[i]->jakosc[y] > wiarygodnosc || wierzcholki[j]->jakosc[y] > wiarygodnosc )
  362. {
  363. macierz_polaczenia[i][j] = 0;
  364. macierz_polaczenia[j][i] = 0;
  365. }
  366. if(tmp > max_deletion)
  367. {
  368. macierz_polaczenia[i][j] = 0;
  369. macierz_polaczenia[j][i] = 0;
  370. }
  371. }
  372.  
  373. }
  374. }
  375. }
  376. }
  377.  
  378.  
  379.  
  380. }
  381.  
  382.  
  383. void polacz_wierzcholki3()
  384. {
  385.  
  386. int n = wierzcholki.size();
  387.  
  388. macierz_polaczenia = new int *[n]; //przydzielamy pamiec na n wierszy
  389. for (int i=0; i< n; i++) // idzemy po macierzy
  390. {
  391. macierz_polaczenia[i] = new int[n]; //przydzielamy dla kazdego wiersza po n kolumn
  392. for (int j = 0; j < n; j++) //zerujemy wszystkie pola w macierzy
  393. macierz_polaczenia[i][j]=0;
  394. }
  395.  
  396.  
  397. string litera1;
  398. string litera2;
  399. int ile_delecji = 0;
  400. int znacznik =0;
  401. int maks_delecji = okno/2 - 1;
  402.  
  403. for(int i = 0; i < n; i++)
  404. {
  405. for(int j = 0; j < n; j++)
  406. {
  407. ile_delecji = 0;
  408. znacznik = 0;
  409.  
  410.  
  411.  
  412. if(wierzcholki[i]->nrsek == wierzcholki[j]->nrsek) // jesli wierzcholki sa z tej samej sekwencji to sprawdzaj nastepne
  413. continue;
  414. if(wierzcholki[i]->sek_wierzch== wierzcholki[j]->sek_wierzch)
  415. {
  416. macierz_polaczenia[i][j] = 1;
  417. macierz_polaczenia[j][i] = 1;
  418. continue;
  419. }
  420.  
  421. string tmp = wierzcholki[i]->sek_wierzch;
  422. int licznik = 0;
  423.  
  424. for(int k = 0; licznik < tmp.size(); k++)
  425. {
  426. ile_delecji = k - licznik;
  427. if(ile_delecji > maks_delecji)
  428. {
  429. znacznik = 1;
  430. break;
  431. }
  432.  
  433. litera1 = tmp.substr(licznik, 1);
  434. litera2 = (wierzcholki[j]->sek_wierzch).substr(licznik, 1);
  435.  
  436.  
  437. if(litera1!=litera2)
  438. {
  439. if (wierzcholki[i]->jakosc[k] < wiarygodnosc) {
  440. tmp.erase(licznik, 1);
  441. }else{
  442. znacznik = 1;
  443. break;
  444. }
  445.  
  446. }else
  447. licznik++;
  448. }
  449.  
  450. if(znacznik==0)
  451. {
  452. macierz_polaczenia[i][j] = 1;
  453. macierz_polaczenia[j][i] = 1;
  454. }
  455. }
  456. }
  457.  
  458.  
  459.  
  460. }
  461.  
  462.  
  463.  
  464. void polacz_wierzcholki4()
  465. {
  466.  
  467. cout<<" ROZMIAR WEKTORA WIERZCHOLKI***********"<<endl;
  468. cout<<wierzcholki.size()<<endl;
  469.  
  470. int rozmiarwierz=wierzcholki.size();
  471.  
  472. macierz_polaczenia = new int *[rozmiarwierz]; //przydzielamy pamiec na n wierszy
  473. for (int i=0; i<rozmiarwierz; i++) // idzemy po macierzy
  474. {
  475. macierz_polaczenia[i] = new int[rozmiarwierz]; //przydzielamy dla kazdego wiersza po n kolumn
  476. for (int j = 0; j <rozmiarwierz; j++) //zerujemy wszystkie pola w macierzy
  477. macierz_polaczenia[i][j]=0;
  478. }
  479.  
  480. int delmax = (okno/2)-1;
  481.  
  482.  
  483. for (int i=0;i<rozmiarwierz;i++)
  484. {
  485. for(int j=i+1; j<rozmiarwierz; j++)
  486. {
  487.  
  488.  
  489. if(wierzcholki[i]->sek_wierzch == wierzcholki[j]->sek_wierzch && wierzcholki[i]->nrsek != wierzcholki[j]->nrsek)
  490. {
  491. macierz_polaczenia[i][j] = 1;
  492. macierz_polaczenia[j][i] = 1;
  493. }
  494. else
  495. {
  496. if(wierzcholki[i]->nrsek != wierzcholki[j]->nrsek)
  497. {
  498. // zakladamy ze delecja
  499. macierz_polaczenia[i][j] = 1;
  500. macierz_polaczenia[j][i] = 1;
  501.  
  502. int tmp = 0;
  503. for(int y=0; y<okno; y++)
  504. {
  505. tmp++;
  506. if(wierzcholki[i]->sek_wierzch[y] != wierzcholki[j]->sek_wierzch[y]) // dla nukleotydu ktory sie nie zgadza
  507. {
  508. if(wierzcholki[i]->jakosc[y] > wiarygodnosc || wierzcholki[j]->jakosc[y] > wiarygodnosc )
  509. {
  510. macierz_polaczenia[i][j] = 0;
  511. macierz_polaczenia[j][i] = 0;
  512. }
  513. if(tmp > delmax)
  514. {
  515. macierz_polaczenia[i][j] = 0;
  516. macierz_polaczenia[j][i] = 0;
  517. }
  518. }
  519.  
  520. }
  521. }
  522. }
  523.  
  524. }
  525. }
  526.  
  527.  
  528.  
  529. }
  530.  
  531. void stopnie_wierzcholkow()
  532. {
  533. int st=0;
  534. for(int i=0; i<wierzcholki.size(); i++)
  535. {
  536. for(int j=0; j<wierzcholki.size(); j++)
  537. {
  538. st=macierz_polaczenia[i][j]+st;
  539. }
  540. wierzcholki[i]->stwierzch = st;
  541. st=0;
  542. }
  543.  
  544.  
  545.  
  546. ///////////// WYPISANIE WSZYSTKICH WIERZCHOLKOW //////////////
  547.  
  548. // /*
  549. for(int i = 0; i < wierzcholki.size(); i++)
  550. {
  551. cout << "Numer wierzcholka: " << i << " ";
  552. cout << "Numer sekwecji: " << wierzcholki[i]->nrsek <<" ";
  553. cout << "Podciag: "<<wierzcholki[i]->sek_wierzch << " ";
  554. cout << "Wiarygodnosci: ";
  555. for(int j =0; j < okno; j++)
  556. {
  557. cout << wierzcholki[i]->jakosc[j] <<" ";
  558. }
  559. cout << "Pozycja: "<<wierzcholki[i]->pozycja << " ";
  560. cout << "Stopien: "<<wierzcholki[i]->stwierzch<< " ";
  561. cout << endl;
  562. }
  563. // */
  564.  
  565.  
  566.  
  567. }
  568.  
  569.  
  570.  
  571.  
  572. vector<int> sasiedzi_wierzcholka(int iwierzch) //szukanie sasiadow dla naszego rozpatrywanego wierzcholka
  573. {
  574. vector<int> sasiedzi_w;
  575. for (int i = 0; i < wierzcholki.size(); i++) //sprawdzamy wszystkie wierzcholki z wektora
  576. {
  577. if (macierz_polaczenia[iwierzch][i] == 1)
  578. {
  579. sasiedzi_w.push_back(i); //jesli mamy polaczenie danego wierzcholka z innym
  580. // to dajemy ten wierzcholek (i) do wektora sasiedzi
  581. }
  582.  
  583. }
  584. return sasiedzi_w;
  585. }
  586.  
  587. vector<int> najsasiedzi_wierzcholka(int iwierzch, int st)
  588. {
  589. vector<int> najsasiedzi_w;
  590. for (int i = 0; i < wierzcholki.size(); i++) //sprawdzamy wszystkie wierzcholki z wektora
  591. {
  592. if (macierz_polaczenia[iwierzch][i] == 1
  593. && wierzcholki[i]->stwierzch >=st)
  594. {
  595. najsasiedzi_w.push_back(i);
  596. }
  597. }
  598. return najsasiedzi_w;
  599.  
  600. }
  601.  
  602. vector<int>wspolni_sasiedzi(vector<int> wyb_sasiedzi, vector<int> sasiedzi_wierzch_naj_st)
  603. {
  604. vector<int> wsp_sasiedzi;
  605. sort(wyb_sasiedzi.begin(), wyb_sasiedzi.end());
  606. sort(sasiedzi_wierzch_naj_st.begin(), sasiedzi_wierzch_naj_st.end());
  607.  
  608. set_intersection(wyb_sasiedzi.begin(), wyb_sasiedzi.end(), sasiedzi_wierzch_naj_st.begin(), sasiedzi_wierzch_naj_st.end(), back_inserter(wsp_sasiedzi));
  609.  
  610. return wsp_sasiedzi;
  611. }
  612.  
  613. int wierzcholek_naj_stopien(vector<int> wyb_sasiedzi) //szukanie wierzcholka o najwyzszym stopniu
  614. {
  615. int najstwierzch=0; //wierzcholek o najwyzszym stopniu (indeks)
  616. int najst=0;
  617. // int przetwarzany; //przetwarzany aktualnie wierzcholek z wektora sasiedzi
  618. int dany_sasiad;
  619.  
  620. for(int i=0; i<wyb_sasiedzi.size(); i++) //rozpatrujemy wszystkich sasiadow
  621. {
  622. dany_sasiad = wyb_sasiedzi[i];
  623. //przetwarzany=dany_sasiad;
  624.  
  625. if(wierzcholki[dany_sasiad]->stwierzch > najst)
  626. {
  627. najstwierzch = dany_sasiad;
  628. najst = wierzcholki[dany_sasiad]->stwierzch;
  629. }
  630. }
  631.  
  632. return najstwierzch;
  633.  
  634. }
  635.  
  636. vector<int>& clique_heu(vector<int> &mozliwe_do_kliki, vector<int> wyb_sasiedzi, int roz, int st)
  637. {
  638. if (wyb_sasiedzi.empty())
  639. {
  640. if (roz > st)
  641. return mozliwe_do_kliki;
  642. }
  643.  
  644.  
  645. int wierzch_o_naj_st = wierzcholek_naj_stopien(wyb_sasiedzi);
  646. mozliwe_do_kliki.push_back(wierzch_o_naj_st);
  647.  
  648. for (int i = 0; i < wyb_sasiedzi.size(); i++) // usuwanie wierzchołka o najwyższym stopniu
  649. {
  650. if (wyb_sasiedzi[i] == wierzch_o_naj_st)
  651. wyb_sasiedzi.erase(wyb_sasiedzi.begin()+i);
  652. }
  653.  
  654.  
  655. vector<int> sasiedzi_wierzch_o_naj_st = najsasiedzi_wierzcholka(wierzch_o_naj_st, st);
  656. vector<int> wsp_sasiedzi = wspolni_sasiedzi(wyb_sasiedzi, sasiedzi_wierzch_o_naj_st);
  657. clique_heu(mozliwe_do_kliki, wsp_sasiedzi, roz + 1, st);
  658.  
  659. return mozliwe_do_kliki;
  660.  
  661. }
  662.  
  663.  
  664. vector<int> max_clique_heu(int st)
  665. {
  666. vector<int> mozliwe_do_kliki;
  667.  
  668. for (int i = 0; i < wierzcholki.size(); i++)
  669. {
  670. mozliwe_do_kliki.push_back(i);
  671. if (wierzcholki[i]->stwierzch >= st)
  672. {
  673. vector<int> wyb_sasiedzi_rozpatrywanego;
  674. vector<int> sasiedzi_rozpatrywanego = sasiedzi_wierzcholka(i);
  675.  
  676. for (int j = 0; j < sasiedzi_rozpatrywanego.size(); j++)
  677. {
  678. int tmp = sasiedzi_rozpatrywanego[j];
  679. if (wierzcholki[i]->stwierzch >= st)
  680. wyb_sasiedzi_rozpatrywanego.push_back(tmp);
  681. }
  682.  
  683. klika= clique_heu(mozliwe_do_kliki, wyb_sasiedzi_rozpatrywanego, 1, st);
  684.  
  685. if (klika.size() > maxklika.size())
  686. maxklika = klika;
  687. }
  688. mozliwe_do_kliki.clear();
  689. }
  690. }
  691.  
  692.  
  693. /*
  694.  
  695.  
  696. void lewo(vector<int>&lewa_klika)
  697. {
  698. for(int i=0; i<lewa_klika.size();i++)
  699. {
  700. if(lewa_klika[i] <=0)
  701. {
  702. return;
  703. }
  704. }
  705.  
  706. for(int i=0; i<lewa_klika.size();i++)
  707. {
  708. for(int j=i+1; j<lewa_klika.size();j++)
  709. {
  710. if (macierz_polaczenia[lewa_klika[i] - 1][lewa_klika[j] - 1] != 1)
  711. {
  712. return;
  713. }
  714.  
  715. }
  716. }
  717.  
  718. for(int i=0; i<lewa_klika.size();i++)
  719. {
  720. lewa_klika[i]--;
  721. }
  722.  
  723. return;
  724.  
  725. }
  726.  
  727.  
  728. void prawo(vector<int>&prawa_klika)
  729. {
  730. for(int i=0; i<prawa_klika.size();i++)
  731. {
  732. if(prawa_klika[i] <=0)
  733. {
  734. return;
  735. }
  736. }
  737.  
  738. for(int i=0; i<prawa_klika.size();i++)
  739. {
  740. for(int j=i+1; j<prawa_klika.size();j++)
  741. {
  742. if (macierz_polaczenia[prawa_klika[i] + 1][prawa_klika[j] + 1] != 1)
  743. {
  744. return;
  745. }
  746.  
  747. }
  748. }
  749.  
  750. for(int i=0; i<prawa_klika.size();i++)
  751. {
  752. prawa_klika[i]++;
  753. }
  754.  
  755. return;
  756.  
  757. }
  758.  
  759.  
  760.  
  761.  
  762.  
  763. void kliki_seria() {
  764.  
  765. vector<int> lewa_klika = maxklika;
  766. vector<int> prawa_klika = maxklika;
  767. vector<string> numerysek; //sekwencje, z ktorej pochodza wierzcholki
  768.  
  769. for (int i = 0; i < maxklika.size(); i++)
  770. {
  771. int tmp=maxklika[i];
  772. numerysek.push_back(wierzcholki[tmp]->nrsek);
  773. }
  774.  
  775.  
  776. lewo(lewa_klika);
  777. prawo(prawa_klika);
  778.  
  779. for (int i = 0; i < maxklika.size(); i++) {
  780. int start = wierzcholki[left_clique[i]].position.first + 1;
  781. int end = vertices[right_clique[i]].position.second - vertices[left_clique[i]].position.first;
  782. string seq = find_sequence(max_clique_found[i], start, end);
  783. max_clique_series.push_back(make_tuple(seq_ids[i], start, start + seq.size(), seq));
  784. }
  785. }
  786. */
  787.  
  788.  
  789.  
  790.  
  791. void lewo2(vector <vector <int> > &wektor_kliki)
  792. {
  793. for(int i = 0; i < wektor_kliki[0].size(); i++)
  794. {
  795. if(wektor_kliki[0][i] == 0)
  796. return;
  797. if(wierzcholki[wektor_kliki[0][i]]->nrsek != wierzcholki[wektor_kliki[0][i]-1]->nrsek)
  798. return;
  799.  
  800. for(int j = i+1; j < wektor_kliki[0].size(); j++)
  801. {
  802. if(macierz_polaczenia[wektor_kliki[0][i]-1][wektor_kliki[0][j]-1] != 1)
  803. return;
  804. }
  805. }
  806. vector <int> tmp;
  807. for(int i =0; i < wektor_kliki[0].size(); i++)
  808. {
  809. tmp.push_back(wektor_kliki[0][i]-1);
  810. }
  811.  
  812. wektor_kliki.insert(wektor_kliki.begin(), tmp);
  813. lewo2(wektor_kliki);
  814. return;
  815. }
  816.  
  817.  
  818. void prawo2(vector <vector <int> > &wektor_kliki)
  819. {
  820.  
  821. for(int i = 0; i < wektor_kliki[wektor_kliki.size()-1].size(); i++)
  822. {
  823.  
  824. if(wektor_kliki[wektor_kliki.size()-1][i] == wierzcholki.size()-1)
  825. return;
  826. if(wierzcholki[wektor_kliki[wektor_kliki.size()-1][i]]->nrsek != wierzcholki[wektor_kliki[wektor_kliki.size()-1][i]+1]->nrsek)
  827. return;
  828.  
  829. for(int j = i+1; j < wektor_kliki[wektor_kliki.size()-1].size(); j++)
  830. {
  831. if(macierz_polaczenia[wektor_kliki[wektor_kliki.size()-1][i]+1][wektor_kliki[wektor_kliki.size()-1][j]+1] !=1)
  832. return;
  833. }
  834. }
  835. vector <int> tmp;
  836. for(int i =0; i < wektor_kliki[wektor_kliki.size()-1].size(); i++)
  837. {
  838. tmp.push_back(wektor_kliki[wektor_kliki.size()-1][i]+1);
  839. }
  840. wektor_kliki.push_back(tmp);
  841. prawo2(wektor_kliki);
  842. return;
  843. }
  844.  
  845.  
  846. void wypisz (vector <vector <int> > &wektor_kliki )
  847. {
  848. int nr_sekwencji = 0;
  849. int poczatek = 0;
  850. int koniec = 0;
  851. int dlugosc = 0;
  852. //cout << wektor_kliki.size() << endl;
  853. // cout << endl << endl;
  854.  
  855.  
  856. for(int j = 0; j < wektor_kliki[0].size(); j++)
  857. {
  858. nr_sekwencji = wierzcholki[wektor_kliki[0][j]]->nrsek;
  859. cout << "W sekwencji nr " << nr_sekwencji << ": ";
  860. // cout << instancja.m_sekwencje[nr_sekwencji]->m_nukleotydy << endl;
  861. poczatek = wierzcholki[wektor_kliki[0][j]]->pozycja;
  862. koniec = wierzcholki[wektor_kliki[wektor_kliki.size()-1][j]]->pozycja + okno-1;
  863. cout << "Start " << poczatek << " Koniec " << koniec << ": ";
  864. dlugosc = koniec - poczatek +1;
  865. cout << sekwencja[nr_sekwencji].substr(poczatek, dlugosc) << endl;
  866. }
  867. }
  868.  
  869.  
  870.  
  871. void rozdzielacz()
  872. {
  873.  
  874. string przyklad="ACGTAGTCCGT";
  875. int dl= przyklad.length()-1;
  876. string sub2;
  877. cout<<przyklad<<endl;
  878. for(int i=0; i<=dl-okno+1;i++)
  879. {
  880. sub2 = przyklad.substr(i, okno); //rozdzielanie ciagu na podciag, zaczynajacy sie w i o dlugosci okna
  881. cout<<sub2<<" ";
  882. }
  883. }
  884.  
  885.  
  886.  
  887. int main()
  888. {
  889. cout << "Hello world!" << endl;
  890. odczyt_pliku();
  891.  
  892. /*
  893. cout<<endl<<endl<<endl<<"***************SEKWENCJE"<<endl;
  894.  
  895. for(int i=0; i<sekwencja.size(); i++ )
  896. {
  897. cout<<sekwencja[i]<<endl;
  898. };
  899.  
  900. cout<<endl<<endl<<endl<<"***************JAKOSCI"<<endl;
  901.  
  902. for(int i=0; i<jakosc_sek.size(); i++ )
  903. {
  904. cout<<jakosc_sek[i]<<endl;
  905. };
  906. */
  907.  
  908. //rozdzielacz();
  909.  
  910. cout<<sekwencja.size()<<endl;
  911.  
  912.  
  913. rozdzielacz_wierzcholki();
  914. cout<<endl<<endl<<endl<<"***************WIERZCHOLKI"<<endl;
  915.  
  916. for(int i=0; i<wierzcholki.size(); i++ )
  917. {
  918. cout<<wierzcholki[i]->sek_wierzch<<" ";
  919. };
  920. polacz_wierzcholki3();
  921. stopnie_wierzcholkow();
  922. max_clique_heu(3);
  923.  
  924. cout<<endl<<endl;
  925.  
  926. cout<<"rozmiar wektora wierzcholki: "<<wierzcholki.size()<<endl;
  927.  
  928. sort(maxklika.begin(), maxklika.end());
  929. cout<<"rozmiar maxkliki: "<<maxklika.size()<<endl;
  930. for(int i =0; i < maxklika.size(); i++)
  931. {
  932. int nr_wierzcholka = maxklika[i];
  933. cout << wierzcholki[nr_wierzcholka]->nrsek << " ";
  934. cout<< wierzcholki[nr_wierzcholka]->sek_wierzch << " ";
  935. cout<<wierzcholki[nr_wierzcholka]->pozycja << " ";
  936. cout<<endl;
  937.  
  938. }
  939. cout << endl;
  940.  
  941. //////////////////////////////POSZERZANIE
  942.  
  943. wektor_kliki.push_back(maxklika);
  944.  
  945. lewo2(wektor_kliki);
  946. prawo2(wektor_kliki);
  947.  
  948. wypisz(wektor_kliki);
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955. return 0;
  956. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement