Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <list>
- #include <stack>
- #include <fstream>
- #include <cstdlib>
- #include <string>
- using namespace std;
- fstream plikin;
- class Graf
- {
- int ilosc_wierz;
- list<int> *LI;
- void wypelnij_czas(int v, bool visited[], stack<int> &Stack)
- {
- visited[v] = true;
- list<int>::iterator i;
- for(i = LI[v].begin(); i != LI[v].end(); ++i)
- if(!visited[*i])
- wypelnij_czas(*i, visited, Stack);
- Stack.push(v);
- }
- void WB22(int v, bool visited[])
- {
- visited[v] = true;
- list<int>::iterator i;
- for (i = LI[v].begin(); i != LI[v].end(); ++i)
- if (!visited[*i])
- WB22(*i, visited);
- }
- void WB(int v, bool visited[])
- {
- visited[v] = true;
- plikin << v << " ";
- list<int>::iterator i;
- for (i = LI[v].begin(); i != LI[v].end(); ++i)
- if (!visited[*i])
- WB(*i, visited);
- }
- public:
- Graf(int V)
- {
- ilosc_wierz = V;
- LI = new list<int>[V];
- }
- void dodaj_krawedz(int v, int w)
- {
- LI[v].push_back(w);
- }
- Graf transponuj()
- {
- Graf g(ilosc_wierz);
- for (int v = 0; v < ilosc_wierz; v++)
- {
- list<int>::iterator i;
- for(i = LI[v].begin(); i != LI[v].end(); ++i)
- {
- g.LI[*i].push_back(v);
- }
- }
- return g;
- }
- void printSCCs(int w)
- {
- stack<int> Stack;
- bool *visited = new bool[ilosc_wierz];
- for(int i = 1; i < ilosc_wierz; i++)
- visited[i] = false;
- for(int i = 1; i < ilosc_wierz; i++)
- if(visited[i] == false)
- wypelnij_czas(i, visited, Stack);
- Graf gr = transponuj();
- for(int i = 1; i < ilosc_wierz; i++)
- visited[i] = false;
- while (Stack.empty() == false)
- {
- int v = Stack.top();
- Stack.pop();
- if (visited[v] == false)
- {
- if(v==w){ gr.WB(v, visited); }
- else{ gr.WB22(v, visited); }
- }
- }
- plikin<<endl;
- }
- };
- int main()
- {
- fstream plikout;
- plikout.open("plikout.txt", std::ios::in);
- plikin.open("plikin.txt", std::ios::out);
- int n,m,k,t;
- double CHF;
- double EUR;
- double macierz[11][11];
- int i=1;
- int j=1;
- if(plikout)
- {
- plikout >> n >> m >> CHF >>EUR >> k >> t;
- while(!plikout.eof())
- {
- for(int z=1;z<11;z++)
- {
- plikout >> macierz[i][j];
- j++;
- }
- j=1;i++;
- }
- }
- plikout.close();
- n+=1;
- Graf zadanie(n);
- for(int i=1;i<11;i++)
- {
- for(int j=1;j<11;j++)
- {
- if(m*(1-macierz[i][j]) > CHF - EUR) zadanie.dodaj_krawedz(i,j);
- }
- }
- zadanie.printSCCs(k);
- zadanie.printSCCs(t);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement