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,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;
}
}
}
...
}