Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<conio.h>
- #include<string>
- #include<vector>
- using namespace std;
- /*
- funkcja tworzy tablice
- @param ilosc liczb
- @return tablica
- */
- int *stworz_tablice(int iN)
- {
- string wyjatek = "nieprawidlowa liczba elementow";
- int *iT = nullptr;
- if (iN < 0) throw wyjatek;
- iT = new int[iN];
- return iT;
- }
- /*
- otwiera plik
- @param nazwa pliku, strumien wejsciowy
- */
- void otworz_plik(string nazwa, ifstream &plik)
- {
- plik.open(nazwa);//otwiera plik
- if (plik.good() == false)
- {
- cout << "nie udalo sie otworzyc pliku" << endl;
- _getch();
- exit(0);
- }
- }
- /*
- *wczytuje liczbe z pliku
- @param strumień wejściowy
- @return liczba
- */
- int wartosc(ifstream &plik)
- {
- int iX = 0;
- plik >> iX;
- if (iX <= 0)
- {
- string wyjatek = "nieprawidlowa wartosc";
- throw wyjatek;//zglasza wyjatek gdy liczba zestawow jest nieprawidlowa
- }
- return iX;
- }
- /*
- *zapis do pliku
- @param nazwa pliku, strumień wyjścia, tekst do zapisu
- */
- void stworz_plik(string nazwa, ofstream &zapis, string tekst)
- {
- zapis.open(nazwa, ios::trunc);
- zapis << tekst << endl;
- zapis.close();
- }
- /*
- oblicz liczbe wierzcholkow
- @param tablica z numerami wierzcholkow
- @return liczba wierzcholkow
- */
- int ilosc_wierzcholkow(int *t_wierzcholkow, int iLiczba_krawedzi)
- {
- int max = t_wierzcholkow[0];
- for (int i = 1; i <= 2*iLiczba_krawedzi; i++)
- {
- if (t_wierzcholkow[i]>max) max = t_wierzcholkow[i];
- }
- return max;
- }
- /*
- tworzy tablice z numerami wierzcholkow
- t[0] poczatek krawedzi t[1] koniec krawedzi i tak dalej
- @param strumień wejściowy
- @return tablica wierzcholkow
- */
- int *t_wierzcholkow(ifstream &plik, int iLiczba_krawedzi)
- {
- int *tablica_wierzcholkow = nullptr;
- tablica_wierzcholkow = stworz_tablice(2 * iLiczba_krawedzi);// poczatek koniec poczatek koniec
- for (int i = 0; i < 2 * iLiczba_krawedzi; i++)
- {
- try
- {
- tablica_wierzcholkow[i] = wartosc(plik);
- }
- catch (string w)
- {
- cout << w;
- _getch();
- exit(0);
- }
- }
- return tablica_wierzcholkow;
- }
- /*
- tworzy tablice dwuwymiarowa i wypelnia ja zerami
- @param ilosc wierszy i kolumn
- @return tablica dwuwymiarowa
- */
- int **stworz_tablice_dwu_wymiarowa(int iW, int iK)
- {
- int **t = nullptr;
- t = new int *[iW];
- for (int i = 0; i<iW; i++)
- {
- t[i] = new int[iK];
- }
- for (int i = 0; i < iW; i++)
- {
- for (int j = 0; j<iK; j++)
- {
- t[i][j] = 0;
- }
- }
- return t;
- }
- /*
- lista jednokierunkowa przechowujaca liczby
- */
- struct lista
- {
- int liczba = 0;
- lista *next;
- };
- /*
- tworzy tablice list incydencji
- @param tablica wierzcholkow, liczba wierzcholkow
- */
- void list(int i,int *t_wierzcholkow,int iLiczba_krawedzi,int **tablica_list)
- {
- int pom = 0;
- lista *head = nullptr, *nowyEl = nullptr, *a = nullptr;
- do
- {
- if (i == t_wierzcholkow[pom])
- {
- nowyEl = new lista;
- nowyEl->next = head;
- nowyEl->liczba = t_wierzcholkow[pom + 1];
- head = nowyEl;
- }
- pom++;
- if (i == t_wierzcholkow[pom])
- {
- nowyEl = new lista;
- nowyEl->next = head;
- nowyEl->liczba = t_wierzcholkow[pom - 1];
- head = nowyEl;
- }
- pom++;
- } while (pom < iLiczba_krawedzi * 2);
- a = head;
- int j = 0;
- while (a != nullptr)
- {
- tablica_list[i - 1][j] = a->liczba;
- a = a->next;
- j++;
- }
- }
- int **lista_incydencji(int *t_wierzcholkow, int iLiczba_wierzcholkow, int iLiczba_krawedzi)
- {
- int pom =0, **tablica_list = nullptr,j=0;
- tablica_list = stworz_tablice_dwu_wymiarowa(iLiczba_wierzcholkow, iLiczba_wierzcholkow);
- for (int i = 1; i <= iLiczba_wierzcholkow; i++)
- {
- list(i, t_wierzcholkow, iLiczba_krawedzi,tablica_list);
- }
- return tablica_list;
- }
- /*
- szuka stopnia wierzcholka i wypisuje go
- @param macierz, liczba wierzcholkow
- */
- void stopien_wierzcholka(int **macierz, int iLiczba_wierzcholkow)
- {
- int licznik = 0;
- for (int i = 0; i < iLiczba_wierzcholkow; i++)
- {
- for (int j = 0; j < iLiczba_wierzcholkow; j++)
- {
- if (macierz[i][j] != 0) licznik++;
- }
- cout << "Stopien " << i + 1 << " wierzcholka jest rowny " << licznik << endl;
- licznik = 0;
- }
- }
- /*
- wypisuje macierz
- @param liczba wierzcholkow, macierz
- */
- void wypisz_tablice(int iLiczba_wierzcholkow, int **macierz)
- {
- for (int i = 0; i < iLiczba_wierzcholkow; i++)
- {
- for (int j = 0; j <iLiczba_wierzcholkow; j++)
- {
- if (macierz[i][j]!=0) cout << macierz[i][j] << " ";
- }
- cout << endl;
- }
- }
- int main()
- {
- ifstream plik;
- otworz_plik("Pary.txt", plik);
- int *t_wierzch = nullptr,iLiczba_krawedzi=0, **macierz=nullptr, iLiczba_wierzcholkow=0;
- try
- {
- iLiczba_krawedzi = wartosc(plik);
- }
- catch (string w)
- {
- cout << w;
- _getch();
- exit(0);
- }
- try
- {
- t_wierzch = t_wierzcholkow(plik, iLiczba_krawedzi);
- }
- catch (string w)
- {
- cout << w;
- _getch();
- exit(0);
- }
- iLiczba_wierzcholkow = ilosc_wierzcholkow(t_wierzch, iLiczba_krawedzi);
- lista_incydencji(t_wierzch, iLiczba_wierzcholkow , iLiczba_krawedzi);
- macierz = lista_incydencji(t_wierzch, iLiczba_wierzcholkow, iLiczba_krawedzi);
- wypisz_tablice(iLiczba_wierzcholkow, macierz);
- stopien_wierzcholka(macierz, iLiczba_wierzcholkow);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement