consolidate all repos to one for archive

This commit is contained in:
2025-01-28 13:46:42 +01:00
commit a6610fbc7a
5350 changed files with 2705721 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
.idea/*
cmake-build-debug/*
CMakeLists.txt

View File

@@ -0,0 +1 @@
Navodila v folder navodila

View File

@@ -0,0 +1,172 @@
#include <iostream>
#include <ctime>
using namespace std;
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
int partition(int A[], int low, int high) {
int m = (low + high) / 2;
swap(&A[low], &A[m]);
int w = A[low];
int i = low;
int j = high;
while (j > i) {
while (A[j] >= w && j > low) j = j - 1;
while (A[i] <= w && i < high) i = i + 1;
if (i < j) {
swap(&A[i], &A[j]);
}
}
swap(&A[low], &A[j]);
return j;
}
void quickSort(int A[], int low, int high) {
if (low < high) {
int j = partition(A, low, high);
quickSort(A, low, j - 1);
quickSort(A, j + 1, high);
}
}
void bubbleSort(int A[], int length) {
int rep = 0;
for (int i = 0; i < length; i++) {
if (rep == 10000) {
cout << ".";
rep = 0;
}
rep++;
for (int j = 0; j < length - i - 1; j++) {
if (A[j] < A[j + 1]) swap(&A[j], &A[j + 1]);
}
}
cout << "\n";
}
void fillArray(int A[], int length) {
for (int i = 0; i < length; i++) {
A[i] = rand();
}
}
void highToLow(int A[], int length) {
int base = length;
for (int i = 0; i < length; i++) {
A[i] = base;
base--;
}
}
void print(int A[], int length) {
for (int i = 0; i < length; i++) {
cout << A[i] << " ";
}
cout << endl;
}
bool check(const int A[], int length) {
for (int i = 0; i < length - 1; i++) {
if (A[i] > A[i + 1]) {
return false;
}
}
return true;
}
void menu() {
cout << "1 ... Generate random sequence \n"
"2 ... Generate sorted rising sequence \n"
"3 ... Generate sorted falling sequence \n"
"4 ... Print sequence \n"
"5 ... quickSort sequence \n"
"6 ... bobbleSort sequence \n"
"7 ... Check sequence \n"
"0 ... End \n \n"
"Your choice: ";
}
int main() {
int length;
// int A[length];
int *A = NULL;
int low = 0;
int high = length - 1;
srand(time(nullptr));
bool running = true;
int selection;
clock_t start, finish;
double duration;
do {
menu();
cin >> selection;
cout << endl;
switch (selection) {
case 1:
cout << "dolzina";
cin >> length;
high = length - 1;
A = new int[length];
fillArray(A, length);
break;
case 2:
cout << "dolzina";
cin >> length;
high = length - 1;
A = new int[length];
fillArray(A, length);
quickSort(A, low, high);
break;
case 3:
cout << "dolzina";
cin >> length;
high = length - 1;
A = new int[length];
highToLow(A, length);
break;
case 4:
print(A, length);
break;
case 5:
start = clock();
quickSort(A, low, high);
finish = clock();
duration = (double) (finish - start) / CLOCKS_PER_SEC;
cout << "Time to sort " << duration << "\n";
break;
case 6:
start = clock();
bubbleSort(A, length);
finish = clock();
duration = (double) (finish - start) / CLOCKS_PER_SEC;
cout << "Time to sort " << duration << "\n";
break;
case 7:
if (check(A, length)) {
cout << "Sequence is sorted \n";
} else {
cout << "Sequence isn't sorted \n";
}
break;
case 0:
running = false;
break;
default:
cout << "Wrong selection!" << endl;
break;
}
cout << endl;
} while (running);
delete[]A;
return 0;
}

View File

@@ -0,0 +1,3 @@
.idea/*
cmake-build-debug/*
CMakeLists.txt

View File

@@ -0,0 +1 @@
Navodila v folder navodila

View 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;
}

View File

@@ -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
}
...
}

View File

@@ -0,0 +1,3 @@
.idea/*
cmake-build-debug/*
CMakeLists.txt

View File

@@ -0,0 +1,41 @@
//
// Created by Nik on 16/04/2022.
//
#include "QuickSort.h"
void QuickSort::swap(Povezava *a, Povezava *b) {
Povezava t = *a;
*a = *b;
*b = t;
}
int QuickSort::partition(Povezava *A, int low, int high) {
int m = (low + high) / 2;
swap(&A[low], &A[m]);
int w = A[low].cost;
int i = low;
int j = high;
while (j > i) {
while (A[j].cost >= w && j > low) j = j - 1;
while (A[i].cost <= w && i < high) i = i + 1;
if (i < j) {
swap(&A[i], &A[j]);
}
}
swap(&A[low], &A[j]);
return j;
}
void QuickSort::quickSort(Povezava *A, int low, int high) {
if (low < high) {
int j = partition(A, low, high);
quickSort(A, low, j - 1);
quickSort(A, j + 1, high);
}
}

View File

@@ -0,0 +1,24 @@
//
// Created by Nik on 16/04/2022.
//
#ifndef NALOGA_3_QUICKSORT_H
#define NALOGA_3_QUICKSORT_H
struct Povezava{
int p, q, cost;
};
class QuickSort {
private:
QuickSort() = default;
public:
static void swap(Povezava *a, Povezava *b);
static int partition(Povezava A[], int low, int high);
static void quickSort(Povezava A[], int low, int high);
};
#endif //NALOGA_3_QUICKSORT_H

View File

@@ -0,0 +1 @@
Navodila v folder navodila

View File

@@ -0,0 +1,169 @@
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "QuickSort.h"
bool pogoj1(const int *S, const Povezava pov) {
if (S[pov.p] == 0 or S[pov.q] == 0) return false;
return (S[pov.p] == S[pov.q]);
}
bool pogoj2(const int *S, const Povezava pov) {
if (S[pov.p] == 0 or S[pov.q] == 0) return false;
return (S[pov.p] != S[pov.q]);
}
bool pogoj3(const int *S, const Povezava pov) {
if (S[pov.p] != 0 and S[pov.q] == 0) return true;
if (S[pov.q] != 0 and S[pov.p] == 0) return true;
return false;
}
bool pogoj4(const int *S, const Povezava pov) {
return (S[pov.p] == 0 and S[pov.q] == 0);
}
void Kruskal(Povezava *P, Povezava *R, int st_vozlisc, int st_povezav) {
QuickSort::quickSort(P, 0, st_povezav - 1);
int S[st_vozlisc + 1];
for (int i = 0; i < st_vozlisc + 1; i++) S[i] = 0;
bool koncano = false;
int i = 0;
int st_sprej_pov = 0;
int stevilo_mnozic = 1;
while (!koncano) {
if (!pogoj1(S, P[i])) {
if (pogoj2(S, P[i])) {
R[st_sprej_pov] = P[i];
st_sprej_pov = st_sprej_pov + 1;
int pridruzujem = S[P[i].p];
int odstranjujem = S[P[i].q];
for (int l = 0; l < st_vozlisc; l++) {
if (S[l] == odstranjujem) S[l] = pridruzujem;
}
} else if (pogoj3(S, P[i])) {
R[st_sprej_pov] = P[i];
st_sprej_pov = st_sprej_pov + 1;
if (S[P[i].p] != 0 and S[P[i].q] == 0) S[P[i].q] = S[P[i].p];
if (S[P[i].q] != 0 and S[P[i].p] == 0) S[P[i].p] = S[P[i].q];
} else if (pogoj4(S, P[i])) {
R[st_sprej_pov] = P[i];
st_sprej_pov = st_sprej_pov + 1;
S[P[i].p] = stevilo_mnozic;
S[P[i].q] = stevilo_mnozic;
stevilo_mnozic += 1;
}
}
if (st_sprej_pov == st_vozlisc - 1) {
koncano = true;
} else {
i = i + 1;
}
}
}
void nafilajRand(Povezava *&P, Povezava *&R, int st_vozlisc, int &st_povezav){
st_povezav = (st_vozlisc * (st_vozlisc - 1)) / 2;
P = new Povezava[st_povezav];
R = new Povezava[st_vozlisc - 1];
int k = 0;
for(int i = 1; i <= st_vozlisc; i++){
for(int j = 1 + i; j <= st_vozlisc; j++){
if(i != j) {
P[k].p = i;
P[k].q = j;
P[k].cost = rand();
k++;
}
}
}
std::cout << "Vozlisca: " << st_vozlisc << " Povezave: " << st_povezav << "\n";
}
void beri(Povezava *&P, Povezava *&R, int &st_vozlisc, int &st_povezav){
std::ifstream f("graf2.txt");
f >> st_vozlisc;
f >> st_povezav;
P = new Povezava[st_povezav];
R = new Povezava[st_vozlisc - 1];
for (int i = 0; i < st_povezav; ++i) {
int v1, v2, cena;
f >> v1 >> v2 >> cena;
P[i].p = v1;
P[i].q = v2;
P[i].cost = cena;
}
f.close();
std::cout << "Vozlisca: " << st_vozlisc << " Povezave: " << st_povezav << "\n";
}
void menu() {
std::cout << "Kruskalov algoritem - izbira: \n"
"1 Preberi graf iz datoteke \n"
"2 Generiraj nakljucni graf \n"
"3 Pozeni \n"
"4 Izpis sprejetih povezav \n"
"0 Konec \n\n"
"Vasa izbira: ";
}
int main() {
std::cout << "Hello, World!" << std::endl;
int st_povezav, st_vozlisc;
clock_t start,finish;
double duration;
Povezava *R;
Povezava *P;
bool running = true;
while (running) {
menu();
int coich;
std::cin >> coich;
switch (coich) {
case 1:
beri(P,R,st_vozlisc,st_povezav);
break;
case 2:
do{
std::cout << "stevilo vozlisc: ";
std::cin >> st_vozlisc;
}while(st_vozlisc > 1500);
nafilajRand(P, R, st_vozlisc, st_povezav);
break;
case 3:
start = clock();
Kruskal(P, R, st_vozlisc, st_povezav);
finish = clock();
duration = (double) (finish - start) / CLOCKS_PER_SEC;
std::cout << "Time to sort " << duration << "\n";
break;
case 4:
for (int i = 0; i < st_vozlisc - 1; i++) {
std::cout << R[i].p << " " << R[i].q << " " << R[i].cost << "\n";
}
break;
case 0:
running = false;
break;
default:
std::cout << " Napaka\n";
break;
}
}
return 0;
}

View File

@@ -0,0 +1,15 @@
8
13
1 2 1
2 3 2
4 6 2
3 5 3
7 8 3
1 3 4
5 6 4
2 5 5
3 4 7
4 5 10
6 7 13
6 8 15
4 7 20

View File

@@ -0,0 +1,21 @@
10
19
1 2 33
1 3 10
1 4 56
2 4 13
2 5 21
3 4 23
3 6 24
3 7 65
4 5 51
4 7 20
5 7 17
5 8 35
6 7 40
6 9 72
7 8 99
7 9 45
7 10 42
8 10 38
9 10 83

View File

@@ -0,0 +1,15 @@
8
13
7 4 20
8 6 15
7 6 13
5 4 10
4 3 7
5 2 5
3 1 4
6 5 4
5 3 3
8 7 3
3 2 2
6 4 2
2 1 1

View File

@@ -0,0 +1,29 @@
#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
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 in vpiši ceno povezave
}
ustvari polje povezav P; // priporočamo dinamično alokacijo
for(p to stevilo_vozlisc....) { // preiščemo zgornji trikotni del matrike C
for (q=p+1 to stevilo_vozlisc....) {
if (C[p][q] != infinity) {
cena = C[p][q];
ustvari objekt tipa Povezava in mu določi atribute p, q in cena;
shrani objekt v polje P;
}
}
}
...
}

View File

@@ -0,0 +1,3 @@
.idea/*
cmake-build-debug/*
CMakeLists.txt

View File

@@ -0,0 +1 @@
Navodila v folder navodila

View File

@@ -0,0 +1,145 @@
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
struct vozlisce {
int vez, predhodnik, cena;
};
int izlociNajmanjsega(std::vector<int> &voz, const std::vector<vozlisce> &rez) {
int tmp = voz[0];
int rem_voz = 0;
for (int i = 0; i < voz.size(); ++i) {
if (rez[tmp].cena > rez[voz[i]].cena) {
tmp = rez[voz[i]].vez;
rem_voz = i;
}
}
if(rem_voz == 0){
voz.erase(voz.begin());
}else {
voz.erase(voz.begin() + rem_voz);
}
return tmp;
}
void dijkstrovAlgoritem(int **&G, int s, const int st_vozlisc, std::vector<vozlisce> &rez) {
std::vector<int> Q;
for (int i = 0; i < st_vozlisc; ++i) {
vozlisce tmp;
tmp.vez = i;
tmp.predhodnik = -1;
tmp.cena = INT32_MAX;
Q.push_back(i);
rez.push_back(tmp);
}
rez[s].cena = 0;
int preg_voz = 0;
while (!Q.empty()) {
preg_voz = izlociNajmanjsega(Q, rez);
for (int i = 0; i < st_vozlisc; i++) {
if (G[preg_voz][i] > 0) {
if(rez[i].cena > rez[preg_voz].cena + G[preg_voz][i]){
rez[i].cena = rez[preg_voz].cena + G[preg_voz][i];
rez[i].predhodnik = preg_voz;
}
}
}
}
}
void izpisPoti(const std::vector<vozlisce> &rez, const int s, int v){
if(s == rez[v].vez){
std::cout << rez[v].vez << " cena: " << rez[v].cena << "\n";
return;
}else{
izpisPoti(rez,s,rez[v].predhodnik);
std::cout << rez[v].vez << " cena: " << rez[v].cena << "\n";
return;
}
}
void beri(int **&G, int &st_vozlisc) {
int st_povezav;
std::ifstream f("graf.txt");
f >> st_vozlisc;
f >> st_povezav;
int v1, v2, cena;
G = new int *[st_vozlisc];
for (int i = 0; i < st_vozlisc; i++) {
G[i] = new int[st_vozlisc];
}
for (int i = 0; i < st_vozlisc; i++) {
for (int j = 0; j < st_vozlisc; j++) {
G[i][j] = 0;
}
}
for (int i = 0; i < st_povezav; i++) {
f >> v1 >> v2 >> cena;
G[v1 - 1][v2 - 1] = cena;
G[v2 - 1][v1 - 1] = cena;
}
std::cout << "Vozlisca: " << st_vozlisc << " Povezave: " << st_povezav << "\n";
// for (int i = 0; i < st_vozlisc; ++i) {
// for (int j = 0; j < st_vozlisc; ++j) {
// std::cout << G[j][i] << " ";
// }
// std::cout << "\n";
// }
}
void menu(){
std::cout << "Dijkstrov algoritem - izbira:\n"
"1 Nalozi graf\n"
"2 Zagon algoritma\n"
"3 Izpis najkrajse poti\n"
"0 Konec\n\n"
"Vasa izbira: ";
}
int main() {
std::cout << "Hello, World!" << std::endl;
int **G;
int st_vozlisc = 0;
std::vector<vozlisce> rez;
bool runing = true;
int condition;
int tmp, iskanoVozlisce;
while(runing){
menu();
std::cin >> condition;
switch (condition) {
case 1:
beri(G, st_vozlisc);
break;
case 2:
std::cout << "Iskano vozlisce: ";
std::cin >> iskanoVozlisce;
dijkstrovAlgoritem(G, iskanoVozlisce, st_vozlisc, rez);
break;
case 3:
// for (int i = 0; i < rez.size(); ++i) {
// std::cout << rez[i].vez << " " << rez[i].predhodnik << " " << rez[i].cena << "\n";
// }
std::cout << "Izberi vozlisce: ";
std::cin >> tmp;
izpisPoti(rez,iskanoVozlisce, tmp);
break;
case 0:
runing = false;
break;
}
}
return 0;
}

View File

@@ -0,0 +1,14 @@
8
12
1 2 3
1 3 6
1 8 1
2 3 2
2 8 2
3 4 1
4 5 6
4 6 3
4 7 4
5 6 3
6 7 2
7 8 10

View File

@@ -0,0 +1,3 @@
.idea/*
cmake-build-debug/*
CMakeLists.txt

View File

@@ -0,0 +1 @@
Navodila v folder navodila

View File

@@ -0,0 +1,139 @@
#include <iostream>
#include <fstream>
void FLOYD_WARSHALL(int **&C, int **&D, int **&PI, int st_vozlisc) {
D = new int *[st_vozlisc];
PI = new int *[st_vozlisc];
for (int i = 0; i < st_vozlisc; i++) {
PI[i] = new int[st_vozlisc];
D[i] = new int[st_vozlisc];
}
for (int i = 0; i < st_vozlisc; i++) {
for (int j = 0; j < st_vozlisc; j++) {
D[i][j] = C[i][j];
if (i != j && C[i][j] != INT16_MAX) { //inf
PI[i][j] = i;
} else {
PI[i][j] = INT16_MAX; //nill
}
}
}
for (int k = 0; k < st_vozlisc; k++) {
for (int i = 0; i < st_vozlisc; i++) {
for (int j = 0; j < st_vozlisc; j++) {
if (D[i][j] > D[i][k] + D[k][j]) {
D[i][j] = D[i][k] + D[k][j];
PI[i][j] = PI[k][j];
}
}
}
}
}
void beri(int **&C, int &st_vozlisc) {
int st_povezav;
std::ifstream f("graf3.txt");
f >> st_vozlisc;
f >> st_povezav;
int v1, v2, cena;
C = new int *[st_vozlisc];
for (int i = 0; i < st_vozlisc; i++) {
C[i] = new int[st_vozlisc];
}
for (int i = 0; i < st_vozlisc; i++) {
for (int j = 0; j < st_vozlisc; j++) {
if (i == j) {
C[i][j] = 0;
} else {
C[i][j] = INT16_MAX; //inf
}
}
}
for (int i = 0; i < st_povezav; i++) {
f >> v1 >> v2 >> cena;
C[v1 - 1][v2 - 1] = cena;
}
std::cout << "Vozlisca: " << st_vozlisc << " Povezave: " << st_povezav << "\n";
}
void izpisPoti(int **&PI, int s, int g) {
if (s == g) {
std::cout << s << " ";
} else {
if (PI[s][g] == INT16_MAX) { //inf
std::cout << "med " << s << " in " << g << " ni poti";
} else {
izpisPoti(PI, s, PI[s][g]);
std::cout << g << " ";
}
}
}
void menu() {
std::cout << "Dijkstrov algoritem - izbira:\n"
"1 Nalozi graf\n"
"2 Zagon algoritma\n"
"3 Izpis najkrajse poti\n"
"0 Konec\n\n"
"Vasa izbira: ";
}
int main() {
std::cout << "Hello, World!" << std::endl;
int **C;
int **D;
int **PI;
int st_vozlisc = 0;
bool runing = true;
int condition;
int s, g;
bool func = false;
while (runing) {
menu();
std::cin >> condition;
switch (condition) {
case 1:
beri(C, st_vozlisc);
break;
case 2:
FLOYD_WARSHALL(C, D, PI, st_vozlisc);
func = true;
break;
case 3:
if (func) {
do {
std::cout << "Izberi s:";
std::cin >> s;
} while (s > st_vozlisc);
do {
std::cout << "Izberi g:";
std::cin >> g;
}while(g > st_vozlisc);
std::cout << "Pot: ";
izpisPoti(PI, s, g);
std::cout << "\n Cena: " << D[s][g];
std::cout << "\n";
}
break;
case 0:
runing = false;
break;
}
}
return 0;
}

View File

@@ -0,0 +1,8 @@
3
6
1 2 10
1 3 4
2 3 3
2 1 5
3 1 8
3 2 2

View File

@@ -0,0 +1,8 @@
4
6
1 2 8
1 4 1
2 3 1
3 1 4
4 2 2
4 3 9

View File

@@ -0,0 +1,11 @@
5
9
1 2 3
1 3 8
1 5 -4
2 4 1
2 5 7
3 2 4
4 1 2
4 3 -5
5 4 6

View File

@@ -0,0 +1,3 @@
.idea/*
cmake-build-debug/*
CMakeLists.txt

View File

@@ -0,0 +1 @@
Navodila v folder navodila

View File

@@ -0,0 +1,159 @@
#include <iostream>
#include <fstream>
#include <vector>
const int inf = 9999;
struct struktura {
std::vector<int> vozlisca;
int dolzina;
bool isInPot(const int p){
for (int i = 0; i < vozlisca.size(); ++i) {
if(vozlisca[i] == p) return true;
}
return false;
}
};
struktura vzemiIzVrste(std::vector<struktura> &Q) {
struktura tmp;
int index = 0;
for (int i = 0; i < Q.size(); ++i) {
if(Q[index].dolzina > Q[i].dolzina){
index = i;
}
}
auto it = Q.begin();
it += index;
tmp = Q[index];
Q.erase(it);
return tmp;
}
void razvejiInOmeji(int **&G, const int s, const int g, std::vector<std::vector<int>>& R, const int stVozlisc , int& dolzina) {
std::vector<struktura> Q;
struktura pot;
pot.vozlisca.push_back(s);
pot.dolzina = 0;
dolzina = inf;
Q.push_back(pot);
struktura p;
struktura p1;
int u;
while (!Q.empty()) {
p = vzemiIzVrste(Q);
u = p.vozlisca.back();
for (int v = 0; v < stVozlisc; ++v) {
if (G[u][v] != inf) {
if(!p.isInPot(v)){
p1 = p;
p1.vozlisca.push_back(v);
p1.dolzina += G[u][v];
if(v == g){
if(p1.dolzina < dolzina){
R.clear();
R.push_back(p1.vozlisca);
dolzina = p1.dolzina;
}else if(p1.dolzina == dolzina){
R.push_back(p1.vozlisca);
}
}else if(p.dolzina < dolzina){
Q.push_back(p1);
}
}
}
}
}
}
void izpis(const std::vector<std::vector<int>>& R, int dolzina){
for (int i = 0; i < R.size(); ++i) {
for (int j = 0; j < R[i].size(); ++j) {
std::cout << R[i][j] << "->";
}
}
std::cout << ", cena = " << dolzina << "\n";
}
void beri(int**& C, int& stVozlisc) {
int stPovezav;
std::ifstream f("graf2.txt");
f >> stVozlisc;
f >> stPovezav;
int v1, v2, cena;
C = new int *[stVozlisc];
for (int i = 0; i < stVozlisc; i++) {
C[i] = new int[stVozlisc];
}
for (int i = 0; i < stVozlisc; ++i) {
for (int j = 0; j < stVozlisc; ++j) {
C[i][j] = inf;
}
}
for (int i = 0; i < stPovezav; i++) {
f >> v1 >> v2 >> cena;
C[v1 - 1][v2 - 1] = cena;
}
std::cout << "Vozlisca: " << stVozlisc << " Povezave: " << stPovezav << "\n";
// for (int i = 0; i < stVozlisc; ++i)
// {
// for (int j = 0; j < stVozlisc; ++j)
// {
// std::cout << C[i][j] << " ";
// }
// std::cout << "\n";
// }
}
void menu(){
std::cout << "Razveji in omeji - izbira:\n"
"1 Preberi podatke iz datoteke\n"
"2 Iskanje poti med vozliscema s in g\n"
"3 Konec\n"
"Vasa izbira:";
}
int main() {
int **C;
int stVozlisc;
std::vector<std::vector<int>> R;
int dolzina;
int izbira, start, end;
bool running = true;
while (running){
menu();
std::cin >> izbira;
switch (izbira) {
case 1:
beri(C, stVozlisc);
break;
case 2:
std::cout << "Izberi s: ";
std::cin >> start;
std::cout << "Izberi end: ";
std::cin >> end;
razvejiInOmeji(C,start,end,R,stVozlisc, dolzina);
izpis(R, dolzina);
break;
default:
running = false;
break;
}
}
return 0;
}

View File

@@ -0,0 +1,24 @@
8
22
1 2 3
1 8 4
2 1 3
2 8 5
2 3 9
3 2 9
3 4 4
3 7 5
4 3 4
4 5 2
5 4 2
5 6 3
5 7 8
6 5 3
6 7 4
7 3 5
7 5 8
7 6 4
7 8 2
8 1 4
8 2 5
8 7 2

View File

@@ -0,0 +1,58 @@
8
56
1 2 18
1 3 18
1 4 38
1 5 6
1 6 49
1 7 7
1 8 48
2 1 20
2 3 38
2 4 28
2 5 43
2 6 28
2 7 25
2 8 42
3 1 40
3 2 7
3 4 21
3 5 48
3 6 24
3 7 23
3 8 15
4 1 27
4 2 5
4 3 39
4 5 27
4 6 50
4 7 44
4 8 35
5 1 7
5 2 25
5 3 11
5 4 30
5 6 16
5 7 24
5 8 48
6 1 19
6 2 5
6 3 49
6 4 43
6 5 1
6 7 24
6 8 4
7 1 10
7 2 25
7 3 41
7 4 34
7 5 42
7 6 33
7 7 7
8 1 17
8 2 23
8 3 47
8 4 4
8 5 44
8 6 42
8 7 24