consolidate all repos to one for archive
This commit is contained in:
3
semester_2/osnove_algoritmov/naloga_2/.gitignore
vendored
Normal file
3
semester_2/osnove_algoritmov/naloga_2/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.idea/*
|
||||
cmake-build-debug/*
|
||||
CMakeLists.txt
|
1
semester_2/osnove_algoritmov/naloga_2/README.md
Normal file
1
semester_2/osnove_algoritmov/naloga_2/README.md
Normal file
@@ -0,0 +1 @@
|
||||
Navodila v folder navodila
|
140
semester_2/osnove_algoritmov/naloga_2/main.cpp
Normal file
140
semester_2/osnove_algoritmov/naloga_2/main.cpp
Normal file
@@ -0,0 +1,140 @@
|
||||
#include <iostream>
|
||||
#include <stack>
|
||||
#include <fstream>
|
||||
|
||||
#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<int> 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;
|
||||
}
|
BIN
semester_2/osnove_algoritmov/naloga_2/navodila/C++ 2D polje.pdf
Normal file
BIN
semester_2/osnove_algoritmov/naloga_2/navodila/C++ 2D polje.pdf
Normal file
Binary file not shown.
Binary file not shown.
BIN
semester_2/osnove_algoritmov/naloga_2/navodila/Vaja_2.pdf
Normal file
BIN
semester_2/osnove_algoritmov/naloga_2/navodila/Vaja_2.pdf
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
#include <fstream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main(){
|
||||
....
|
||||
ifstream f("graf.txt"); // odpremo datoteko (v isti mapi, kot je projekt oziroma exe datoteka)
|
||||
// če so težave z branjem, zapišite absolutno pot, npr: ifstream f("c:/graf.txt");
|
||||
|
||||
f >> stevilo_vozlisc; // v prvi vrstici datoteke imamo stevilo vozlisc
|
||||
f >> stevilo_povezav; // v drugi vrstici datoteke imamo stevilo povezav oziroma vrstic v nadaljevnaju datoteke
|
||||
ustvari matriko sosednosti C (2D polje); // priporočamo dinamično alokacijo
|
||||
ustvari polje V in dodaj vozlišča v V, kjer je ime=indeks;
|
||||
for(i to stevilo_povezav....){
|
||||
f >> v1 >> v2 >> cena; // v vsaki vrstici beremo 3 podatke (stevilke)
|
||||
v matriki C označi vozlišči v1 in v2 kot soseda
|
||||
}
|
||||
...
|
||||
}
|
Reference in New Issue
Block a user