2021-02-22
slides.com/jod/pt_6c
Docent: Jo Devriendt
Assistent: Ann Philips
Coördinator: Joost Vennekens
voornaam.achternaam@kuleuven.be
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
5
-1 9 2 -1 6
9 -1 -1 4 8
2 -1 -1 7 5
-1 4 7 -1 3
6 8 5 3 -1
2
5
1
3
2
4
9
4
7
3
5
6
8
1 -> 2 : 9
1 -> 3 : 2
1 -> 4 : 10000
1 -> 5 : 6
10017Vervangen door zo eenvoudig mogelijke procedure die een minimum spanning tree (MST) berekent
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Gegeven een deel van de MST, dan behoort de
boog met laagste gewicht die vanuit de deel-MST vertrekt en toekomt buiten de deel-MST, ook tot de MST.
2
5
1
3
2
4
9
4
7
3
5
6
8
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
2
9
4
7
3
5
6
8
5
1
3
2
4
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
void main(int argc, char* argv[]){
int n;
int afstand[NMAX][NMAX];
int len;
Tak opl[NMAX];
n = leesGraaf(afstand);
simpelMst(afstand,opl,n);
len = totaalGewicht(opl,n);
drukGraaf(opl,n,len);
}void main(int argc, char* argv[]){
int n;
int afstand[NMAX][NMAX];
int len;
Tak opl[NMAX];
n = leesGraaf(afstand);
kiesArbitrair(afstand,opl,n);
len = totaalGewicht(opl,n);
drukGraaf(opl,n,len);
}Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Procedures:
- simpelMst
- kleinsteViolet
- isViolet
void simpelMst(int afstand[][NMAX], Tak opl[], int n){
char kleur[NMAX]; // 'r' is rood, 'b' blauw
kleur[0]='r';
for(int i=1; i<n; ++i){
kleur[i]='b';
}
for(int i=0; i<n-1; ++i){
opl[i]=kleinsteViolet(afstand,n,kleur);
kleur[opl[i].van]='r';
kleur[opl[i].naar]='r';
}
}Datastructuur: lijst met kleur van knopen
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
int isViolet(int x, int y, char kleur[]){
return kleur[x]!=kleur[y];
}
Tak kleinsteViolet(int afstand[][NMAX],int n,char kleur[]){
Tak kleinste = {-1,-1,ZEERGROOT+1};
for(int i=0; i<n; ++i){
for(int j=i+1; j<n; ++j){
if(isViolet(i,j,kleur)
&& kleinste.gewicht>afstand[i][j]){
kleinste.van=i;
kleinste.naar=j;
kleinste.gewicht = afstand[i][j];
}
}
}
return kleinste;
}Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Voorlopig: onbestaande bogen krijgen "zeer groot" gewicht, en worden voor de rest behandeld als gewone bogen
Werkt perfect: zal enkel een kleinste violette boog zijn indien graaf niet samenhangend is (niet alles kan verbonden worden).
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
5
-1 9 2 -1 6
9 -1 -1 4 8
2 -1 -1 7 5
-1 4 7 -1 3
6 8 5 3 -1
Werkende code met nog meeste code van eerste programma :)
2
5
1
3
2
4
9
4
7
3
5
6
8
0 -> 2 : 2
2 -> 4 : 5
3 -> 4 : 3
1 -> 3 : 4
142
9
4
7
3
5
6
8
5
1
3
2
4