#include #include #include #include using namespace std; bool bfun_OpenFile(string &sName, ifstream &fsFil); void vfun_SaveToFile1(const string sName, int iValue); void vfun_CheckNumberEdges(ifstream &fsFile, const int &iEdgeNumber); int ifun_CheckNumberVertices(ifstream &fsFile, int iEdgeNumber); void vfun_MakeIncidentList(vector &vIncidentList, ifstream &fsFile, const int &iEdgeNumber, string sName); void vfun_SaveToFile2(vector &vIncidentList, const int &iVerticesNumber); int main() { string sName; ifstream fsFile; int iEdgeNumber, iVerticesNumber; do { cin >> sName; } while (!bfun_OpenFile(sName, fsFile)); fsFile >> iEdgeNumber; vfun_CheckNumberEdges(fsFile, iEdgeNumber); iVerticesNumber = ifun_CheckNumberVertices(fsFile, iEdgeNumber); vector incidentList(iVerticesNumber); vfun_MakeIncidentList(incidentList, fsFile, iEdgeNumber, sName); vfun_SaveToFile2(incidentList, iVerticesNumber); fsFile.close(); return 0; } /** * Szukanie pliku, sprawdzanie czy jest z rozszerzeniem .txt, dopisywaie .txt * @param sName oryginalna nazwa pliku tekstowego * @param fsFile nazwa którą nadaliśmy plikowi * @return true gdy znaleziono plik * @return false gdy nie znaleziono pliku */ bool bfun_OpenFile(string &sName, ifstream &fsFile) { try { if (sName.find(".txt") != string::npos) { fsFile.open(sName.c_str()); } else { sName += ".txt"; fsFile.open(sName.c_str()); } if (!fsFile) { throw "!"; } } catch (char *cError) { fsFile.clear(); cout << cError; return false; } return true; } /** * Funkcja zapisująca do pliku * @param sName nazwa pliku * @param iValue wartość */ void vfun_SaveToFile1(const string sName, int iValue) { ofstream outFile; outFile.open(sName, ios::app); outFile << iValue << ", "; outFile.close(); } /** * Funkcja sprawdzająca czy liczba krawędzi jest poprawna * @param fsFile plik z danymi * @param iEdgeNumber ilość krawędzi */ void vfun_CheckNumberEdges(ifstream &fsFile, const int &iEdgeNumber) { if (iEdgeNumber < 0) { cout << "!"; exit(EXIT_FAILURE); } } /** * Sprawdzanie liczy wierzchołków * @param fsFile plik z danymi * @param iEdgeNumber liczba krawędzi * @return iMax liczba wierzchołków */ int ifun_CheckNumberVertices(ifstream &fsFile, int iEdgeNumber) { int iTemporary; int iMax = 0; while (fsFile.eof() == false) { fsFile >> iTemporary; if (iTemporary > iMax) { iMax = iTemporary; } } return iMax; } void vfun_MakeIncidentList(vector &vIncidentList, ifstream &fsFile, const int &iEdgeNumber, string sName) { int iFirst = 0, iSecond = 0, iTemporary = 0; fsFile.close(); bfun_OpenFile(sName, fsFile); fsFile >> iTemporary; for (int i = 0; i < iEdgeNumber; i++) { fsFile >> iFirst; fsFile >> iSecond; vIncidentList[iFirst - 1].AddElement(iSecond); vIncidentList[iSecond - 1].AddElement(iFirst); } } void vfun_SaveToFile2(vector &vIncidentList, const int &iVerticesNumber) { ofstream outFile; outFile.open("Wyniki.txt", ios::app); for (int i = 0; i < iVerticesNumber; i++) { vfun_SaveToFile1("Wyniki.txt", i + 1); outFile << vIncidentList[i]; } for (int i = 0; i < iVerticesNumber; i++) { vfun_SaveToFile1("Wyniki.txt", i + 1); outFile << vIncidentList[i].Size(); outFile << endl; } outFile.close(); }