#include #include #include #define NEPREGLEDANO 0 #define V_OBDELAVI 1 #define RAZVITO 2 struct Vozlisce { int predhodnik; int dolzina; int status; int indeks; }; void ISKANJE_V_GLOBINO(int s, int size, const int G[], Vozlisce vozl[]) { std::stack stack; for (int i = 0; i < size; i++) { vozl[i].status = NEPREGLEDANO; vozl[i].dolzina = -1; vozl[i].predhodnik = -1; vozl[i].indeks = i; } vozl[s].status = V_OBDELAVI; vozl[s].dolzina = 0; vozl[s].predhodnik = -1; stack.push(s); // vstavi na vrh sklada while (!stack.empty()) { int v = stack.top();//vzemi vozlišče iz vrha sklada stack.pop(); for (int i = 0; i < size; ++i) { if (G[size * v + i] == 1) { if (vozl[i].status == NEPREGLEDANO) { vozl[i].status = V_OBDELAVI; vozl[i].dolzina = vozl[v].dolzina + 1; vozl[i].predhodnik = vozl[v].indeks; stack.push(i); // vstavi na vrh sklada } } } vozl[v].status = RAZVITO; } } void IZPIS_POTI(int iskano, Vozlisce vozl[]) { if (vozl[iskano].predhodnik == -1) { std::cout << vozl[iskano].indeks << " "; return; } else { IZPIS_POTI(vozl[iskano].predhodnik, vozl); std::cout << vozl[iskano].indeks << " "; } } void IZPIS_SEZNAMA(Vozlisce vozl[], int size) { for (int i = 0; i < size; i++) { std::cout << "indeks: " << vozl[i].indeks << "\n"; std::cout << "predhodnik: " << vozl[i].predhodnik << "\n"; std::cout << "dolzina: " << vozl[i].dolzina << "\n\n"; } } void menu() { std::cout << "Iskanje v globino:\n" "1) Preberi graf\n" "2) Pozeni iskanje iz vozlisca s\n" "3) Izpis seznama vozlisc in njihovih podatkov\n" "4) Izpis poti med vozliscema s in d\n" "0) Konec\n" "Vasa izbira: "; } int main() { std::cout << "Hello, World!" << std::endl; Vozlisce *vozl; int *G; int stevilo_vozlisc; int stevilo_povezav; std::ifstream f("graf_big.txt"); f >> stevilo_vozlisc; f >> stevilo_povezav; vozl = new Vozlisce[stevilo_vozlisc]; G = new int[stevilo_vozlisc * stevilo_vozlisc]; for (int i = 0; i < stevilo_povezav; ++i) { int v1, v2, cena; f >> v1 >> v2 >> cena; v1 = v1 - 1; v2 = v2 - 1; G[stevilo_vozlisc * v1 + v2] = 1; G[stevilo_vozlisc * v2 + v1] = 1; } bool running = true; int selection; int izbira; do { menu(); std::cin >> selection; std::cout << std::endl; switch (selection) { case 1: std::cout << "Prebrano\n" "St.vozlisc: " << stevilo_vozlisc << " St.povezav: " << stevilo_povezav << "\n"; break; case 2: std::cout << "Izberi vozlisce: "; std::cin >> izbira; ISKANJE_V_GLOBINO(izbira, stevilo_vozlisc, G, vozl); break; case 3: IZPIS_SEZNAMA(vozl, stevilo_vozlisc); break; case 4: std::cout << "Izberi vozlisce: "; std::cin >> izbira; IZPIS_POTI(izbira, vozl); break; case 0: running = false; break; default: std::cout << "Wrong selection!\n"; break; } std::cout << std::endl; } while (running); delete[] vozl; delete[] G; return 0; }