Skip to content

Commit 08afb38

Browse files
authored
2022: rotate labs (acs-pa#29)
1 parent a33726e commit 08afb38

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

143 files changed

+307504
-307492
lines changed

skel/lab09/check

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#!/usr/bin/env bash
22

3-
NUM_TASKS=3
4-
TASKS=(task-1 task-2 task-3)
5-
NUM_TESTS=(10 10 10)
3+
NUM_TASKS=2
4+
TASKS=(task-1 task-3)
5+
NUM_TESTS=(10 10)
66

77
TIMEOUT_CPP=1
88
TIMEOUT_JAVA=10

skel/lab09/cpp/task-2/main.cpp

-86
This file was deleted.

skel/lab09/cpp/task-3/main.cpp

+36-33
Original file line numberDiff line numberDiff line change
@@ -2,62 +2,65 @@
22
using namespace std;
33

44
// numarul maxim de noduri
5-
#define NMAX 105
5+
#define NMAX 50005
6+
7+
// valoare mai mare decat orice distanta din graf
8+
#define INF (1 << 30)
69

710
class Task {
811
public:
912
void solve() {
1013
read_input();
11-
compute();
12-
print_output();
14+
print_output(get_result());
1315
}
1416

1517
private:
16-
// n = numar de noduri
17-
int n;
18-
19-
// w[x]y] = costul muchiei de la x la y: (x, y, w[x][y])
20-
// (w[x][y] = 0 - muchia lipseste)
21-
int w[NMAX][NMAX];
22-
23-
// d[x][y] = lungimea drumului minim de la x la y
24-
int d[NMAX][NMAX];
18+
// n = numar de noduri, m = numar de muchii
19+
int n, m;
20+
// adj[x] = lista de adiacenta a nodului x
21+
// perechea (y, w) semnifica muchie de la x la y de cost w: (x, y, w)
22+
vector<pair<int, int>> adj[NMAX];
23+
// nodul sursa
24+
int source;
2525

2626
void read_input() {
2727
ifstream fin("in");
28-
fin >> n;
29-
for (int x = 1; x <= n; x++) {
30-
for (int y = 1; y <= n; y++) {
31-
fin >> w[x][y];
32-
}
28+
fin >> n >> m >> source;
29+
for (int i = 1, x, y, w; i <= m; i++) {
30+
fin >> x >> y >> w;
31+
adj[x].push_back({y, w});
3332
}
3433
fin.close();
3534
}
3635

37-
void compute() {
36+
vector<int> get_result() {
3837
//
39-
// TODO: Gasiti distantele minime intre oricare doua noduri, folosind Roy-Floyd
40-
// pe graful orientat cu n noduri, m arce stocat in matricea ponderilor w
41-
// (declarata mai sus).
38+
// TODO: Gasiti distantele minime de la nodul source la celelalte noduri
39+
// folosind Bellman-Ford pe graful orientat cu n noduri, m arce stocat in adj.
40+
// d[node] = costul minim / lungimea minima a unui drum de la source la nodul
41+
// node;
42+
// d[source] = 0;
43+
// d[node] = -1, daca nu se poate ajunge de la source la node.
4244
//
4345
// Atentie:
44-
// O muchie (x, y, w[x][y]) este reprezentata astfel in matricea ponderilor:
45-
// w[x][y] este costul muchiei de la x la y
46-
// Daca nu exista o muchie intre doua noduri x si y, in matricea ponderilor:
47-
// w[x][y] = 0;
46+
// O muchie este tinuta ca o pereche (nod adiacent, cost muchie):
47+
// adj[x][i] == (y, w) - unde y este al i-lea vecin al lui x, iar (x, y) are cost w: (x, y, w)
4848
//
49-
// Trebuie sa populati matricea d[][] (declarata mai sus):
50-
// d[x][y] = distanta minima intre nodurile x si y, daca exista drum.
51-
// d[x][y] = 0 daca nu exista drum intre x si y.
52-
// * implicit: d[x][x] = 0 (distanta de la un nod la el insusi).
49+
// In cazul in care exista ciclu de cost negativ, returnati un vector gol:
50+
// return {};
5351
//
52+
53+
vector<int> d(n + 1, 0);
54+
return d;
5455
}
5556

56-
void print_output() {
57+
void print_output(vector<int> result) {
5758
ofstream fout("out");
58-
for (int x = 1; x <= n; x++) {
59-
for (int y = 1; y <= n; y++) {
60-
fout << d[x][y] << ' ';
59+
if (result.size() == 0) {
60+
fout << "Ciclu negativ!\n";
61+
} else {
62+
for (int i = 1; i <= n; i++) {
63+
fout << result[i] << ' ';
6164
}
6265
fout << '\n';
6366
}

skel/lab09/java/task-2/src/Main.java

-114
This file was deleted.

0 commit comments

Comments
 (0)