CPSC 490 Problem Solving in Computer Science
Trees, MST, Euler Tour, and Backtracking
Lucca Siaudzionis and Jack Spalding-Jamieson 2020/01/16
University of British Columbia
CPSC 490 Problem Solving in Computer Science Trees, MST, Euler - - PowerPoint PPT Presentation
CPSC 490 Problem Solving in Computer Science Trees, MST, Euler Tour, and Backtracking Lucca Siaudzionis and Jack Spalding-Jamieson 2020/01/16 University of British Columbia Announcements Office hours will be Tuesdays from 2-4pm in ICCS
University of British Columbia
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1Technically, it is not O(1). However, it is fast enough that we can pretend it is.
26
27
28
29
30
31
21 int nkqueens(vector<vector<int>> &cur_placements, int n, int k) { 22
if (k <= 0) return 1;
23
int ans = 0;
24
for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j)
25
if (cur_placements[i][j] == 0) {
26
set_rcd(cur_placements,n,i,j,1); //place & block rcd
27
ans += nkqueens(cur_placements, n, k-1);
28
set_rcd(cur_placements,n,i,j,-1); //undo blocks
29
}
30
return ans;
31 } 32 int nkqueens(int n, int k) { 33
vector<vector<int>> cur_placements(n,vector<int>(n));
34
return nkqueens(cur_placements, n, k)/factorial(n); // note: need to implement factorial
35 }
32
1 // set row, column, and diagonal around point (i,j) to v 2 void set_rcd(vector<vector<int>> &b, int n, int i, int j, int v) { 3
for (int k = 0; k < n; ++k) {
4
b[k][j] += v;
5
b[i][k] += v;
6
}
7
int i_pos = i, j_pos = j;
8
while (i_pos >= 0 && j_pos >= 0) {
9
10
}
11
for (++i_pos, ++j_pos; i_pos < n && j_pos < n; ++i_pos, ++j_pos)
12
b[i_pos][j_pos] += v;
13
int i_neg = i, j_neg = j;
14
while (i_neg >= 0 && j_neg < n) {
15
16
}
17
for (++i_neg, --j_neg; i_neg < n && j_neg >= 0; ++i_neg, --j_neg)
18
b[i_neg][j_neg] += v;
19 }
33
34
1
2
3
4
5
6
7
8
9
10 11
12
35
1
2
3
4
5
6
7
8
9
10 11
12
36
37
38
39
40
41
1
2
3
4
5
6
7
8 9
10
11
42
1
2
3
4
5
6
7 8
9
10
11
43
44
45
46
47
48
49