Add files via upload
parent
6aca581981
commit
e3dfb777cd
@ -0,0 +1,46 @@
|
||||
10
|
||||
0 1
|
||||
0 2
|
||||
0 3
|
||||
0 4
|
||||
0 5
|
||||
0 6
|
||||
0 7
|
||||
0 8
|
||||
0 9
|
||||
1 2
|
||||
1 3
|
||||
1 4
|
||||
1 5
|
||||
1 6
|
||||
1 7
|
||||
1 8
|
||||
1 9
|
||||
2 3
|
||||
2 4
|
||||
2 5
|
||||
2 6
|
||||
2 7
|
||||
2 8
|
||||
2 9
|
||||
3 4
|
||||
3 5
|
||||
3 6
|
||||
3 7
|
||||
3 8
|
||||
3 9
|
||||
4 5
|
||||
4 6
|
||||
4 7
|
||||
4 8
|
||||
4 9
|
||||
5 6
|
||||
5 7
|
||||
5 8
|
||||
5 9
|
||||
6 7
|
||||
6 8
|
||||
6 9
|
||||
7 8
|
||||
7 9
|
||||
8 9
|
@ -0,0 +1,181 @@
|
||||
100
|
||||
0 10
|
||||
0 1
|
||||
10 20
|
||||
10 11
|
||||
20 30
|
||||
20 21
|
||||
30 40
|
||||
30 31
|
||||
40 50
|
||||
40 41
|
||||
50 60
|
||||
50 51
|
||||
60 70
|
||||
60 61
|
||||
70 80
|
||||
70 71
|
||||
80 90
|
||||
80 81
|
||||
1 11
|
||||
1 2
|
||||
11 21
|
||||
11 12
|
||||
21 31
|
||||
21 22
|
||||
31 41
|
||||
31 32
|
||||
41 51
|
||||
41 42
|
||||
51 61
|
||||
51 52
|
||||
61 71
|
||||
61 62
|
||||
71 81
|
||||
71 72
|
||||
81 91
|
||||
81 82
|
||||
2 12
|
||||
2 3
|
||||
12 22
|
||||
12 13
|
||||
22 32
|
||||
22 23
|
||||
32 42
|
||||
32 33
|
||||
42 52
|
||||
42 43
|
||||
52 62
|
||||
52 53
|
||||
62 72
|
||||
62 63
|
||||
72 82
|
||||
72 73
|
||||
82 92
|
||||
82 83
|
||||
3 13
|
||||
3 4
|
||||
13 23
|
||||
13 14
|
||||
23 33
|
||||
23 24
|
||||
33 43
|
||||
33 34
|
||||
43 53
|
||||
43 44
|
||||
53 63
|
||||
53 54
|
||||
63 73
|
||||
63 64
|
||||
73 83
|
||||
73 74
|
||||
83 93
|
||||
83 84
|
||||
4 14
|
||||
4 5
|
||||
14 24
|
||||
14 15
|
||||
24 34
|
||||
24 25
|
||||
34 44
|
||||
34 35
|
||||
44 54
|
||||
44 45
|
||||
54 64
|
||||
54 55
|
||||
64 74
|
||||
64 65
|
||||
74 84
|
||||
74 75
|
||||
84 94
|
||||
84 85
|
||||
5 15
|
||||
5 6
|
||||
15 25
|
||||
15 16
|
||||
25 35
|
||||
25 26
|
||||
35 45
|
||||
35 36
|
||||
45 55
|
||||
45 46
|
||||
55 65
|
||||
55 56
|
||||
65 75
|
||||
65 66
|
||||
75 85
|
||||
75 76
|
||||
85 95
|
||||
85 86
|
||||
6 16
|
||||
6 7
|
||||
16 26
|
||||
16 17
|
||||
26 36
|
||||
26 27
|
||||
36 46
|
||||
36 37
|
||||
46 56
|
||||
46 47
|
||||
56 66
|
||||
56 57
|
||||
66 76
|
||||
66 67
|
||||
76 86
|
||||
76 77
|
||||
86 96
|
||||
86 87
|
||||
7 17
|
||||
7 8
|
||||
17 27
|
||||
17 18
|
||||
27 37
|
||||
27 28
|
||||
37 47
|
||||
37 38
|
||||
47 57
|
||||
47 48
|
||||
57 67
|
||||
57 58
|
||||
67 77
|
||||
67 68
|
||||
77 87
|
||||
77 78
|
||||
87 97
|
||||
87 88
|
||||
8 18
|
||||
8 9
|
||||
18 28
|
||||
18 19
|
||||
28 38
|
||||
28 29
|
||||
38 48
|
||||
38 39
|
||||
48 58
|
||||
48 49
|
||||
58 68
|
||||
58 59
|
||||
68 78
|
||||
68 69
|
||||
78 88
|
||||
78 79
|
||||
88 98
|
||||
88 89
|
||||
9 19
|
||||
19 29
|
||||
29 39
|
||||
39 49
|
||||
49 59
|
||||
59 69
|
||||
69 79
|
||||
79 89
|
||||
89 99
|
||||
90 91
|
||||
91 92
|
||||
92 93
|
||||
93 94
|
||||
94 95
|
||||
95 96
|
||||
96 97
|
||||
97 98
|
||||
98 99
|
@ -0,0 +1,127 @@
|
||||
127
|
||||
0 1
|
||||
0 2
|
||||
1 3
|
||||
1 4
|
||||
2 5
|
||||
2 6
|
||||
3 7
|
||||
3 8
|
||||
4 9
|
||||
4 10
|
||||
5 11
|
||||
5 12
|
||||
6 13
|
||||
6 14
|
||||
7 15
|
||||
7 16
|
||||
8 17
|
||||
8 18
|
||||
9 19
|
||||
9 20
|
||||
10 21
|
||||
10 22
|
||||
11 23
|
||||
11 24
|
||||
12 25
|
||||
12 26
|
||||
13 27
|
||||
13 28
|
||||
14 29
|
||||
14 30
|
||||
15 31
|
||||
15 32
|
||||
16 33
|
||||
16 34
|
||||
17 35
|
||||
17 36
|
||||
18 37
|
||||
18 38
|
||||
19 39
|
||||
19 40
|
||||
20 41
|
||||
20 42
|
||||
21 43
|
||||
21 44
|
||||
22 45
|
||||
22 46
|
||||
23 47
|
||||
23 48
|
||||
24 49
|
||||
24 50
|
||||
25 51
|
||||
25 52
|
||||
26 53
|
||||
26 54
|
||||
27 55
|
||||
27 56
|
||||
28 57
|
||||
28 58
|
||||
29 59
|
||||
29 60
|
||||
30 61
|
||||
30 62
|
||||
31 63
|
||||
31 64
|
||||
32 65
|
||||
32 66
|
||||
33 67
|
||||
33 68
|
||||
34 69
|
||||
34 70
|
||||
35 71
|
||||
35 72
|
||||
36 73
|
||||
36 74
|
||||
37 75
|
||||
37 76
|
||||
38 77
|
||||
38 78
|
||||
39 79
|
||||
39 80
|
||||
40 81
|
||||
40 82
|
||||
41 83
|
||||
41 84
|
||||
42 85
|
||||
42 86
|
||||
43 87
|
||||
43 88
|
||||
44 89
|
||||
44 90
|
||||
45 91
|
||||
45 92
|
||||
46 93
|
||||
46 94
|
||||
47 95
|
||||
47 96
|
||||
48 97
|
||||
48 98
|
||||
49 99
|
||||
49 100
|
||||
50 101
|
||||
50 102
|
||||
51 103
|
||||
51 104
|
||||
52 105
|
||||
52 106
|
||||
53 107
|
||||
53 108
|
||||
54 109
|
||||
54 110
|
||||
55 111
|
||||
55 112
|
||||
56 113
|
||||
56 114
|
||||
57 115
|
||||
57 116
|
||||
58 117
|
||||
58 118
|
||||
59 119
|
||||
59 120
|
||||
60 121
|
||||
60 122
|
||||
61 123
|
||||
61 124
|
||||
62 125
|
||||
62 126
|
@ -0,0 +1,436 @@
|
||||
30
|
||||
0 1
|
||||
0 2
|
||||
0 3
|
||||
0 4
|
||||
0 5
|
||||
0 6
|
||||
0 7
|
||||
0 8
|
||||
0 9
|
||||
0 10
|
||||
0 11
|
||||
0 12
|
||||
0 13
|
||||
0 14
|
||||
0 15
|
||||
0 16
|
||||
0 17
|
||||
0 18
|
||||
0 19
|
||||
0 20
|
||||
0 21
|
||||
0 22
|
||||
0 23
|
||||
0 24
|
||||
0 25
|
||||
0 26
|
||||
0 27
|
||||
0 28
|
||||
0 29
|
||||
1 2
|
||||
1 3
|
||||
1 4
|
||||
1 5
|
||||
1 6
|
||||
1 7
|
||||
1 8
|
||||
1 9
|
||||
1 10
|
||||
1 11
|
||||
1 12
|
||||
1 13
|
||||
1 14
|
||||
1 15
|
||||
1 16
|
||||
1 17
|
||||
1 18
|
||||
1 19
|
||||
1 20
|
||||
1 21
|
||||
1 22
|
||||
1 23
|
||||
1 24
|
||||
1 25
|
||||
1 26
|
||||
1 27
|
||||
1 28
|
||||
1 29
|
||||
2 3
|
||||
2 4
|
||||
2 5
|
||||
2 6
|
||||
2 7
|
||||
2 8
|
||||
2 9
|
||||
2 10
|
||||
2 11
|
||||
2 12
|
||||
2 13
|
||||
2 14
|
||||
2 15
|
||||
2 16
|
||||
2 17
|
||||
2 18
|
||||
2 19
|
||||
2 20
|
||||
2 21
|
||||
2 22
|
||||
2 23
|
||||
2 24
|
||||
2 25
|
||||
2 26
|
||||
2 27
|
||||
2 28
|
||||
2 29
|
||||
3 4
|
||||
3 5
|
||||
3 6
|
||||
3 7
|
||||
3 8
|
||||
3 9
|
||||
3 10
|
||||
3 11
|
||||
3 12
|
||||
3 13
|
||||
3 14
|
||||
3 15
|
||||
3 16
|
||||
3 17
|
||||
3 18
|
||||
3 19
|
||||
3 20
|
||||
3 21
|
||||
3 22
|
||||
3 23
|
||||
3 24
|
||||
3 25
|
||||
3 26
|
||||
3 27
|
||||
3 28
|
||||
3 29
|
||||
4 5
|
||||
4 6
|
||||
4 7
|
||||
4 8
|
||||
4 9
|
||||
4 10
|
||||
4 11
|
||||
4 12
|
||||
4 13
|
||||
4 14
|
||||
4 15
|
||||
4 16
|
||||
4 17
|
||||
4 18
|
||||
4 19
|
||||
4 20
|
||||
4 21
|
||||
4 22
|
||||
4 23
|
||||
4 24
|
||||
4 25
|
||||
4 26
|
||||
4 27
|
||||
4 28
|
||||
4 29
|
||||
5 6
|
||||
5 7
|
||||
5 8
|
||||
5 9
|
||||
5 10
|
||||
5 11
|
||||
5 12
|
||||
5 13
|
||||
5 14
|
||||
5 15
|
||||
5 16
|
||||
5 17
|
||||
5 18
|
||||
5 19
|
||||
5 20
|
||||
5 21
|
||||
5 22
|
||||
5 23
|
||||
5 24
|
||||
5 25
|
||||
5 26
|
||||
5 27
|
||||
5 28
|
||||
5 29
|
||||
6 7
|
||||
6 8
|
||||
6 9
|
||||
6 10
|
||||
6 11
|
||||
6 12
|
||||
6 13
|
||||
6 14
|
||||
6 15
|
||||
6 16
|
||||
6 17
|
||||
6 18
|
||||
6 19
|
||||
6 20
|
||||
6 21
|
||||
6 22
|
||||
6 23
|
||||
6 24
|
||||
6 25
|
||||
6 26
|
||||
6 27
|
||||
6 28
|
||||
6 29
|
||||
7 8
|
||||
7 9
|
||||
7 10
|
||||
7 11
|
||||
7 12
|
||||
7 13
|
||||
7 14
|
||||
7 15
|
||||
7 16
|
||||
7 17
|
||||
7 18
|
||||
7 19
|
||||
7 20
|
||||
7 21
|
||||
7 22
|
||||
7 23
|
||||
7 24
|
||||
7 25
|
||||
7 26
|
||||
7 27
|
||||
7 28
|
||||
7 29
|
||||
8 9
|
||||
8 10
|
||||
8 11
|
||||
8 12
|
||||
8 13
|
||||
8 14
|
||||
8 15
|
||||
8 16
|
||||
8 17
|
||||
8 18
|
||||
8 19
|
||||
8 20
|
||||
8 21
|
||||
8 22
|
||||
8 23
|
||||
8 24
|
||||
8 25
|
||||
8 26
|
||||
8 27
|
||||
8 28
|
||||
8 29
|
||||
9 10
|
||||
9 11
|
||||
9 12
|
||||
9 13
|
||||
9 14
|
||||
9 15
|
||||
9 16
|
||||
9 17
|
||||
9 18
|
||||
9 19
|
||||
9 20
|
||||
9 21
|
||||
9 22
|
||||
9 23
|
||||
9 24
|
||||
9 25
|
||||
9 26
|
||||
9 27
|
||||
9 28
|
||||
9 29
|
||||
10 11
|
||||
10 12
|
||||
10 13
|
||||
10 14
|
||||
10 15
|
||||
10 16
|
||||
10 17
|
||||
10 18
|
||||
10 19
|
||||
10 20
|
||||
10 21
|
||||
10 22
|
||||
10 23
|
||||
10 24
|
||||
10 25
|
||||
10 26
|
||||
10 27
|
||||
10 28
|
||||
10 29
|
||||
11 12
|
||||
11 13
|
||||
11 14
|
||||
11 15
|
||||
11 16
|
||||
11 17
|
||||
11 18
|
||||
11 19
|
||||
11 20
|
||||
11 21
|
||||
11 22
|
||||
11 23
|
||||
11 24
|
||||
11 25
|
||||
11 26
|
||||
11 27
|
||||
11 28
|
||||
11 29
|
||||
12 13
|
||||
12 14
|
||||
12 15
|
||||
12 16
|
||||
12 17
|
||||
12 18
|
||||
12 19
|
||||
12 20
|
||||
12 21
|
||||
12 22
|
||||
12 23
|
||||
12 24
|
||||
12 25
|
||||
12 26
|
||||
12 27
|
||||
12 28
|
||||
12 29
|
||||
13 14
|
||||
13 15
|
||||
13 16
|
||||
13 17
|
||||
13 18
|
||||
13 19
|
||||
13 20
|
||||
13 21
|
||||
13 22
|
||||
13 23
|
||||
13 24
|
||||
13 25
|
||||
13 26
|
||||
13 27
|
||||
13 28
|
||||
13 29
|
||||
14 15
|
||||
14 16
|
||||
14 17
|
||||
14 18
|
||||
14 19
|
||||
14 20
|
||||
14 21
|
||||
14 22
|
||||
14 23
|
||||
14 24
|
||||
14 25
|
||||
14 26
|
||||
14 27
|
||||
14 28
|
||||
14 29
|
||||
15 16
|
||||
15 17
|
||||
15 18
|
||||
15 19
|
||||
15 20
|
||||
15 21
|
||||
15 22
|
||||
15 23
|
||||
15 24
|
||||
15 25
|
||||
15 26
|
||||
15 27
|
||||
15 28
|
||||
15 29
|
||||
16 17
|
||||
16 18
|
||||
16 19
|
||||
16 20
|
||||
16 21
|
||||
16 22
|
||||
16 23
|
||||
16 24
|
||||
16 25
|
||||
16 26
|
||||
16 27
|
||||
16 28
|
||||
16 29
|
||||
17 18
|
||||
17 19
|
||||
17 20
|
||||
17 21
|
||||
17 22
|
||||
17 23
|
||||
17 24
|
||||
17 25
|
||||
17 26
|
||||
17 27
|
||||
17 28
|
||||
17 29
|
||||
18 19
|
||||
18 20
|
||||
18 21
|
||||
18 22
|
||||
18 23
|
||||
18 24
|
||||
18 25
|
||||
18 26
|
||||
18 27
|
||||
18 28
|
||||
18 29
|
||||
19 20
|
||||
19 21
|
||||
19 22
|
||||
19 23
|
||||
19 24
|
||||
19 25
|
||||
19 26
|
||||
19 27
|
||||
19 28
|
||||
19 29
|
||||
20 21
|
||||
20 22
|
||||
20 23
|
||||
20 24
|
||||
20 25
|
||||
20 26
|
||||
20 27
|
||||
20 28
|
||||
20 29
|
||||
21 22
|
||||
21 23
|
||||
21 24
|
||||
21 25
|
||||
21 26
|
||||
21 27
|
||||
21 28
|
||||
21 29
|
||||
22 23
|
||||
22 24
|
||||
22 25
|
||||
22 26
|
||||
22 27
|
||||
22 28
|
||||
22 29
|
||||
23 24
|
||||
23 25
|
||||
23 26
|
||||
23 27
|
||||
23 28
|
||||
23 29
|
||||
24 25
|
||||
24 26
|
||||
24 27
|
||||
24 28
|
||||
24 29
|
||||
25 26
|
||||
25 27
|
||||
25 28
|
||||
25 29
|
||||
26 27
|
||||
26 28
|
||||
26 29
|
||||
27 28
|
||||
27 29
|
||||
28 29
|
@ -0,0 +1,31 @@
|
||||
30
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 8
|
||||
8 9
|
||||
9 10
|
||||
10 11
|
||||
11 12
|
||||
12 13
|
||||
13 14
|
||||
14 15
|
||||
15 16
|
||||
16 17
|
||||
17 18
|
||||
18 19
|
||||
19 20
|
||||
20 21
|
||||
21 22
|
||||
22 23
|
||||
23 24
|
||||
24 25
|
||||
25 26
|
||||
26 27
|
||||
27 28
|
||||
28 29
|
||||
29 0
|
@ -0,0 +1,31 @@
|
||||
31
|
||||
0 1
|
||||
0 2
|
||||
1 3
|
||||
1 4
|
||||
2 5
|
||||
2 6
|
||||
3 7
|
||||
3 8
|
||||
4 9
|
||||
4 10
|
||||
5 11
|
||||
5 12
|
||||
6 13
|
||||
6 14
|
||||
7 15
|
||||
7 16
|
||||
8 17
|
||||
8 18
|
||||
9 19
|
||||
9 20
|
||||
10 21
|
||||
10 22
|
||||
11 23
|
||||
11 24
|
||||
12 25
|
||||
12 26
|
||||
13 27
|
||||
13 28
|
||||
14 29
|
||||
14 30
|
@ -0,0 +1,65 @@
|
||||
33
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 8
|
||||
8 9
|
||||
9 10
|
||||
10 11
|
||||
11 12
|
||||
12 13
|
||||
13 14
|
||||
14 15
|
||||
15 16
|
||||
16 17
|
||||
17 18
|
||||
18 19
|
||||
19 20
|
||||
20 21
|
||||
21 22
|
||||
22 23
|
||||
23 24
|
||||
24 25
|
||||
25 26
|
||||
26 27
|
||||
27 28
|
||||
28 29
|
||||
29 30
|
||||
30 31
|
||||
31 0
|
||||
0 32
|
||||
1 32
|
||||
2 32
|
||||
3 32
|
||||
4 32
|
||||
5 32
|
||||
6 32
|
||||
7 32
|
||||
8 32
|
||||
9 32
|
||||
10 32
|
||||
11 32
|
||||
12 32
|
||||
13 32
|
||||
14 32
|
||||
15 32
|
||||
16 32
|
||||
17 32
|
||||
18 32
|
||||
19 32
|
||||
20 32
|
||||
21 32
|
||||
22 32
|
||||
23 32
|
||||
24 32
|
||||
25 32
|
||||
26 32
|
||||
27 32
|
||||
28 32
|
||||
29 32
|
||||
30 32
|
||||
31 32
|
@ -0,0 +1,13 @@
|
||||
9
|
||||
0 3
|
||||
0 1
|
||||
3 6
|
||||
3 4
|
||||
1 4
|
||||
1 2
|
||||
4 7
|
||||
4 5
|
||||
2 5
|
||||
5 8
|
||||
6 7
|
||||
7 8
|
@ -0,0 +1,50 @@
|
||||
50
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 8
|
||||
8 9
|
||||
9 10
|
||||
10 11
|
||||
11 12
|
||||
12 13
|
||||
13 14
|
||||
14 15
|
||||
15 16
|
||||
16 17
|
||||
17 18
|
||||
18 19
|
||||
19 20
|
||||
20 21
|
||||
21 22
|
||||
22 23
|
||||
23 24
|
||||
24 25
|
||||
25 26
|
||||
26 27
|
||||
27 28
|
||||
28 29
|
||||
29 30
|
||||
30 31
|
||||
31 32
|
||||
32 33
|
||||
33 34
|
||||
34 35
|
||||
35 36
|
||||
36 37
|
||||
37 38
|
||||
38 39
|
||||
39 40
|
||||
40 41
|
||||
41 42
|
||||
42 43
|
||||
43 44
|
||||
44 45
|
||||
45 46
|
||||
46 47
|
||||
47 48
|
||||
48 49
|
@ -0,0 +1,41 @@
|
||||
25
|
||||
0 5
|
||||
0 1
|
||||
5 10
|
||||
5 6
|
||||
10 15
|
||||
10 11
|
||||
15 20
|
||||
15 16
|
||||
1 6
|
||||
1 2
|
||||
6 11
|
||||
6 7
|
||||
11 16
|
||||
11 12
|
||||
16 21
|
||||
16 17
|
||||
2 7
|
||||
2 3
|
||||
7 12
|
||||
7 8
|
||||
12 17
|
||||
12 13
|
||||
17 22
|
||||
17 18
|
||||
3 8
|
||||
3 4
|
||||
8 13
|
||||
8 9
|
||||
13 18
|
||||
13 14
|
||||
18 23
|
||||
18 19
|
||||
4 9
|
||||
9 14
|
||||
14 19
|
||||
19 24
|
||||
20 21
|
||||
21 22
|
||||
22 23
|
||||
23 24
|
@ -0,0 +1,61 @@
|
||||
60
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 8
|
||||
8 9
|
||||
9 10
|
||||
10 11
|
||||
11 12
|
||||
12 13
|
||||
13 14
|
||||
14 15
|
||||
15 16
|
||||
16 17
|
||||
17 18
|
||||
18 19
|
||||
19 20
|
||||
20 21
|
||||
21 22
|
||||
22 23
|
||||
23 24
|
||||
24 25
|
||||
25 26
|
||||
26 27
|
||||
27 28
|
||||
28 29
|
||||
29 30
|
||||
30 31
|
||||
31 32
|
||||
32 33
|
||||
33 34
|
||||
34 35
|
||||
35 36
|
||||
36 37
|
||||
37 38
|
||||
38 39
|
||||
39 40
|
||||
40 41
|
||||
41 42
|
||||
42 43
|
||||
43 44
|
||||
44 45
|
||||
45 46
|
||||
46 47
|
||||
47 48
|
||||
48 49
|
||||
49 50
|
||||
50 51
|
||||
51 52
|
||||
52 53
|
||||
53 54
|
||||
54 55
|
||||
55 56
|
||||
56 57
|
||||
57 58
|
||||
58 59
|
||||
59 0
|
@ -0,0 +1,63 @@
|
||||
63
|
||||
0 1
|
||||
0 2
|
||||
1 3
|
||||
1 4
|
||||
2 5
|
||||
2 6
|
||||
3 7
|
||||
3 8
|
||||
4 9
|
||||
4 10
|
||||
5 11
|
||||
5 12
|
||||
6 13
|
||||
6 14
|
||||
7 15
|
||||
7 16
|
||||
8 17
|
||||
8 18
|
||||
9 19
|
||||
9 20
|
||||
10 21
|
||||
10 22
|
||||
11 23
|
||||
11 24
|
||||
12 25
|
||||
12 26
|
||||
13 27
|
||||
13 28
|
||||
14 29
|
||||
14 30
|
||||
15 31
|
||||
15 32
|
||||
16 33
|
||||
16 34
|
||||
17 35
|
||||
17 36
|
||||
18 37
|
||||
18 38
|
||||
19 39
|
||||
19 40
|
||||
20 41
|
||||
20 42
|
||||
21 43
|
||||
21 44
|
||||
22 45
|
||||
22 46
|
||||
23 47
|
||||
23 48
|
||||
24 49
|
||||
24 50
|
||||
25 51
|
||||
25 52
|
||||
26 53
|
||||
26 54
|
||||
27 55
|
||||
27 56
|
||||
28 57
|
||||
28 58
|
||||
29 59
|
||||
29 60
|
||||
30 61
|
||||
30 62
|
@ -0,0 +1,129 @@
|
||||
65
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 8
|
||||
8 9
|
||||
9 10
|
||||
10 11
|
||||
11 12
|
||||
12 13
|
||||
13 14
|
||||
14 15
|
||||
15 16
|
||||
16 17
|
||||
17 18
|
||||
18 19
|
||||
19 20
|
||||
20 21
|
||||
21 22
|
||||
22 23
|
||||
23 24
|
||||
24 25
|
||||
25 26
|
||||
26 27
|
||||
27 28
|
||||
28 29
|
||||
29 30
|
||||
30 31
|
||||
31 32
|
||||
32 33
|
||||
33 34
|
||||
34 35
|
||||
35 36
|
||||
36 37
|
||||
37 38
|
||||
38 39
|
||||
39 40
|
||||
40 41
|
||||
41 42
|
||||
42 43
|
||||
43 44
|
||||
44 45
|
||||
45 46
|
||||
46 47
|
||||
47 48
|
||||
48 49
|
||||
49 50
|
||||
50 51
|
||||
51 52
|
||||
52 53
|
||||
53 54
|
||||
54 55
|
||||
55 56
|
||||
56 57
|
||||
57 58
|
||||
58 59
|
||||
59 60
|
||||
60 61
|
||||
61 62
|
||||
62 63
|
||||
63 0
|
||||
0 64
|
||||
1 64
|
||||
2 64
|
||||
3 64
|
||||
4 64
|
||||
5 64
|
||||
6 64
|
||||
7 64
|
||||
8 64
|
||||
9 64
|
||||
10 64
|
||||
11 64
|
||||
12 64
|
||||
13 64
|
||||
14 64
|
||||
15 64
|
||||
16 64
|
||||
17 64
|
||||
18 64
|
||||
19 64
|
||||
20 64
|
||||
21 64
|
||||
22 64
|
||||
23 64
|
||||
24 64
|
||||
25 64
|
||||
26 64
|
||||
27 64
|
||||
28 64
|
||||
29 64
|
||||
30 64
|
||||
31 64
|
||||
32 64
|
||||
33 64
|
||||
34 64
|
||||
35 64
|
||||
36 64
|
||||
37 64
|
||||
38 64
|
||||
39 64
|
||||
40 64
|
||||
41 64
|
||||
42 64
|
||||
43 64
|
||||
44 64
|
||||
45 64
|
||||
46 64
|
||||
47 64
|
||||
48 64
|
||||
49 64
|
||||
50 64
|
||||
51 64
|
||||
52 64
|
||||
53 64
|
||||
54 64
|
||||
55 64
|
||||
56 64
|
||||
57 64
|
||||
58 64
|
||||
59 64
|
||||
60 64
|
||||
61 64
|
||||
62 64
|
||||
63 64
|
@ -0,0 +1,17 @@
|
||||
9
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 0
|
||||
0 8
|
||||
1 8
|
||||
2 8
|
||||
3 8
|
||||
4 8
|
||||
5 8
|
||||
6 8
|
||||
7 8
|
@ -0,0 +1,919 @@
|
||||
45
|
||||
2 1
|
||||
3 1
|
||||
3 2
|
||||
4 1
|
||||
4 2
|
||||
4 3
|
||||
5 1
|
||||
5 2
|
||||
5 3
|
||||
5 4
|
||||
6 1
|
||||
6 2
|
||||
6 3
|
||||
6 4
|
||||
6 5
|
||||
7 1
|
||||
7 2
|
||||
7 3
|
||||
7 4
|
||||
7 5
|
||||
7 6
|
||||
8 1
|
||||
8 2
|
||||
8 3
|
||||
8 4
|
||||
8 5
|
||||
8 6
|
||||
8 7
|
||||
9 1
|
||||
9 2
|
||||
9 3
|
||||
9 4
|
||||
9 5
|
||||
9 6
|
||||
9 7
|
||||
9 8
|
||||
10 2
|
||||
10 3
|
||||
10 4
|
||||
10 5
|
||||
10 6
|
||||
10 7
|
||||
10 8
|
||||
10 9
|
||||
11 1
|
||||
11 3
|
||||
11 4
|
||||
11 5
|
||||
11 6
|
||||
11 7
|
||||
11 8
|
||||
11 9
|
||||
12 1
|
||||
12 2
|
||||
12 4
|
||||
12 5
|
||||
12 6
|
||||
12 7
|
||||
12 8
|
||||
12 9
|
||||
13 1
|
||||
13 2
|
||||
13 3
|
||||
13 5
|
||||
13 6
|
||||
13 7
|
||||
13 8
|
||||
13 9
|
||||
13 10
|
||||
13 11
|
||||
13 12
|
||||
14 1
|
||||
14 2
|
||||
14 3
|
||||
14 4
|
||||
14 6
|
||||
14 7
|
||||
14 8
|
||||
14 9
|
||||
14 10
|
||||
14 11
|
||||
14 12
|
||||
15 1
|
||||
15 2
|
||||
15 3
|
||||
15 4
|
||||
15 5
|
||||
15 7
|
||||
15 8
|
||||
15 9
|
||||
15 10
|
||||
15 11
|
||||
15 12
|
||||
16 1
|
||||
16 2
|
||||
16 3
|
||||
16 4
|
||||
16 5
|
||||
16 6
|
||||
16 8
|
||||
16 9
|
||||
16 10
|
||||
16 11
|
||||
16 12
|
||||
16 13
|
||||
16 14
|
||||
16 15
|
||||
17 1
|
||||
17 2
|
||||
17 3
|
||||
17 4
|
||||
17 5
|
||||
17 6
|
||||
17 7
|
||||
17 9
|
||||
17 10
|
||||
17 11
|
||||
17 12
|
||||
17 13
|
||||
17 14
|
||||
17 15
|
||||
18 1
|
||||
18 2
|
||||
18 3
|
||||
18 4
|
||||
18 5
|
||||
18 6
|
||||
18 7
|
||||
18 8
|
||||
18 10
|
||||
18 11
|
||||
18 12
|
||||
18 13
|
||||
18 14
|
||||
18 15
|
||||
19 2
|
||||
19 3
|
||||
19 4
|
||||
19 5
|
||||
19 6
|
||||
19 7
|
||||
19 8
|
||||
19 9
|
||||
19 10
|
||||
19 11
|
||||
19 12
|
||||
19 13
|
||||
19 14
|
||||
19 15
|
||||
19 16
|
||||
19 17
|
||||
19 18
|
||||
20 1
|
||||
20 2
|
||||
20 3
|
||||
20 4
|
||||
20 6
|
||||
20 7
|
||||
20 8
|
||||
20 9
|
||||
20 10
|
||||
20 11
|
||||
20 12
|
||||
20 13
|
||||
20 14
|
||||
20 15
|
||||
20 16
|
||||
20 17
|
||||
20 18
|
||||
21 1
|
||||
21 2
|
||||
21 3
|
||||
21 4
|
||||
21 5
|
||||
21 6
|
||||
21 7
|
||||
21 8
|
||||
21 10
|
||||
21 11
|
||||
21 12
|
||||
21 13
|
||||
21 14
|
||||
21 15
|
||||
21 16
|
||||
21 17
|
||||
21 18
|
||||
22 2
|
||||
22 3
|
||||
22 4
|
||||
22 5
|
||||
22 6
|
||||
22 7
|
||||
22 8
|
||||
22 9
|
||||
22 10
|
||||
22 11
|
||||
22 12
|
||||
22 13
|
||||
22 14
|
||||
22 15
|
||||
22 16
|
||||
22 17
|
||||
22 18
|
||||
22 19
|
||||
22 20
|
||||
22 21
|
||||
23 1
|
||||
23 2
|
||||
23 3
|
||||
23 5
|
||||
23 6
|
||||
23 7
|
||||
23 8
|
||||
23 9
|
||||
23 10
|
||||
23 11
|
||||
23 12
|
||||
23 13
|
||||
23 14
|
||||
23 15
|
||||
23 16
|
||||
23 17
|
||||
23 18
|
||||
23 19
|
||||
23 20
|
||||
23 21
|
||||
24 1
|
||||
24 2
|
||||
24 3
|
||||
24 4
|
||||
24 5
|
||||
24 6
|
||||
24 7
|
||||
24 9
|
||||
24 10
|
||||
24 11
|
||||
24 12
|
||||
24 13
|
||||
24 14
|
||||
24 15
|
||||
24 16
|
||||
24 17
|
||||
24 18
|
||||
24 19
|
||||
24 20
|
||||
24 21
|
||||
25 2
|
||||
25 3
|
||||
25 4
|
||||
25 5
|
||||
25 6
|
||||
25 7
|
||||
25 8
|
||||
25 9
|
||||
25 10
|
||||
25 11
|
||||
25 12
|
||||
25 13
|
||||
25 14
|
||||
25 15
|
||||
25 16
|
||||
25 17
|
||||
25 18
|
||||
25 19
|
||||
25 20
|
||||
25 21
|
||||
25 22
|
||||
25 23
|
||||
25 24
|
||||
26 1
|
||||
26 2
|
||||
26 3
|
||||
26 4
|
||||
26 5
|
||||
26 7
|
||||
26 8
|
||||
26 9
|
||||
26 10
|
||||
26 11
|
||||
26 12
|
||||
26 13
|
||||
26 14
|
||||
26 15
|
||||
26 16
|
||||
26 17
|
||||
26 18
|
||||
26 19
|
||||
26 20
|
||||
26 21
|
||||
26 22
|
||||
26 23
|
||||
26 24
|
||||
27 1
|
||||
27 2
|
||||
27 3
|
||||
27 4
|
||||
27 5
|
||||
27 6
|
||||
27 8
|
||||
27 9
|
||||
27 10
|
||||
27 11
|
||||
27 12
|
||||
27 13
|
||||
27 14
|
||||
27 15
|
||||
27 16
|
||||
27 17
|
||||
27 18
|
||||
27 19
|
||||
27 20
|
||||
27 21
|
||||
27 22
|
||||
27 23
|
||||
27 24
|
||||
28 1
|
||||
28 3
|
||||
28 4
|
||||
28 5
|
||||
28 6
|
||||
28 7
|
||||
28 8
|
||||
28 9
|
||||
28 10
|
||||
28 11
|
||||
28 12
|
||||
28 13
|
||||
28 14
|
||||
28 15
|
||||
28 16
|
||||
28 17
|
||||
28 18
|
||||
28 19
|
||||
28 20
|
||||
28 21
|
||||
28 22
|
||||
28 23
|
||||
28 24
|
||||
28 25
|
||||
28 26
|
||||
28 27
|
||||
29 1
|
||||
29 2
|
||||
29 3
|
||||
29 5
|
||||
29 6
|
||||
29 7
|
||||
29 8
|
||||
29 9
|
||||
29 10
|
||||
29 11
|
||||
29 12
|
||||
29 13
|
||||
29 14
|
||||
29 15
|
||||
29 16
|
||||
29 17
|
||||
29 18
|
||||
29 19
|
||||
29 20
|
||||
29 21
|
||||
29 22
|
||||
29 23
|
||||
29 24
|
||||
29 25
|
||||
29 26
|
||||
29 27
|
||||
30 1
|
||||
30 2
|
||||
30 3
|
||||
30 4
|
||||
30 5
|
||||
30 6
|
||||
30 7
|
||||
30 8
|
||||
30 10
|
||||
30 11
|
||||
30 12
|
||||
30 13
|
||||
30 14
|
||||
30 15
|
||||
30 16
|
||||
30 17
|
||||
30 18
|
||||
30 19
|
||||
30 20
|
||||
30 21
|
||||
30 22
|
||||
30 23
|
||||
30 24
|
||||
30 25
|
||||
30 26
|
||||
30 27
|
||||
31 1
|
||||
31 3
|
||||
31 4
|
||||
31 5
|
||||
31 6
|
||||
31 7
|
||||
31 8
|
||||
31 9
|
||||
31 10
|
||||
31 11
|
||||
31 12
|
||||
31 13
|
||||
31 14
|
||||
31 15
|
||||
31 16
|
||||
31 17
|
||||
31 18
|
||||
31 19
|
||||
31 20
|
||||
31 21
|
||||
31 22
|
||||
31 23
|
||||
31 24
|
||||
31 25
|
||||
31 26
|
||||
31 27
|
||||
31 28
|
||||
31 29
|
||||
31 30
|
||||
32 1
|
||||
32 2
|
||||
32 3
|
||||
32 4
|
||||
32 6
|
||||
32 7
|
||||
32 8
|
||||
32 9
|
||||
32 10
|
||||
32 11
|
||||
32 12
|
||||
32 13
|
||||
32 14
|
||||
32 15
|
||||
32 16
|
||||
32 17
|
||||
32 18
|
||||
32 19
|
||||
32 20
|
||||
32 21
|
||||
32 22
|
||||
32 23
|
||||
32 24
|
||||
32 25
|
||||
32 26
|
||||
32 27
|
||||
32 28
|
||||
32 29
|
||||
32 30
|
||||
33 1
|
||||
33 2
|
||||
33 3
|
||||
33 4
|
||||
33 5
|
||||
33 6
|
||||
33 8
|
||||
33 9
|
||||
33 10
|
||||
33 11
|
||||
33 12
|
||||
33 13
|
||||
33 14
|
||||
33 15
|
||||
33 16
|
||||
33 17
|
||||
33 18
|
||||
33 19
|
||||
33 20
|
||||
33 21
|
||||
33 22
|
||||
33 23
|
||||
33 24
|
||||
33 25
|
||||
33 26
|
||||
33 27
|
||||
33 28
|
||||
33 29
|
||||
33 30
|
||||
34 1
|
||||
34 3
|
||||
34 4
|
||||
34 5
|
||||
34 6
|
||||
34 7
|
||||
34 8
|
||||
34 9
|
||||
34 10
|
||||
34 11
|
||||
34 12
|
||||
34 13
|
||||
34 14
|
||||
34 15
|
||||
34 16
|
||||
34 17
|
||||
34 18
|
||||
34 19
|
||||
34 20
|
||||
34 21
|
||||
34 22
|
||||
34 23
|
||||
34 24
|
||||
34 25
|
||||
34 26
|
||||
34 27
|
||||
34 28
|
||||
34 29
|
||||
34 30
|
||||
34 31
|
||||
34 32
|
||||
34 33
|
||||
35 1
|
||||
35 2
|
||||
35 3
|
||||
35 4
|
||||
35 5
|
||||
35 7
|
||||
35 8
|
||||
35 9
|
||||
35 10
|
||||
35 11
|
||||
35 12
|
||||
35 13
|
||||
35 14
|
||||
35 15
|
||||
35 16
|
||||
35 17
|
||||
35 18
|
||||
35 19
|
||||
35 20
|
||||
35 21
|
||||
35 22
|
||||
35 23
|
||||
35 24
|
||||
35 25
|
||||
35 26
|
||||
35 27
|
||||
35 28
|
||||
35 29
|
||||
35 30
|
||||
35 31
|
||||
35 32
|
||||
35 33
|
||||
36 1
|
||||
36 2
|
||||
36 3
|
||||
36 4
|
||||
36 5
|
||||
36 6
|
||||
36 7
|
||||
36 9
|
||||
36 10
|
||||
36 11
|
||||
36 12
|
||||
36 13
|
||||
36 14
|
||||
36 15
|
||||
36 16
|
||||
36 17
|
||||
36 18
|
||||
36 19
|
||||
36 20
|
||||
36 21
|
||||
36 22
|
||||
36 23
|
||||
36 24
|
||||
36 25
|
||||
36 26
|
||||
36 27
|
||||
36 28
|
||||
36 29
|
||||
36 30
|
||||
36 31
|
||||
36 32
|
||||
36 33
|
||||
37 1
|
||||
37 2
|
||||
37 4
|
||||
37 5
|
||||
37 6
|
||||
37 7
|
||||
37 8
|
||||
37 9
|
||||
37 10
|
||||
37 11
|
||||
37 12
|
||||
37 13
|
||||
37 14
|
||||
37 15
|
||||
37 16
|
||||
37 17
|
||||
37 18
|
||||
37 19
|
||||
37 20
|
||||
37 21
|
||||
37 22
|
||||
37 23
|
||||
37 24
|
||||
37 25
|
||||
37 26
|
||||
37 27
|
||||
37 28
|
||||
37 29
|
||||
37 30
|
||||
37 31
|
||||
37 32
|
||||
37 33
|
||||
37 34
|
||||
37 35
|
||||
37 36
|
||||
38 1
|
||||
38 2
|
||||
38 3
|
||||
38 4
|
||||
38 5
|
||||
38 7
|
||||
38 8
|
||||
38 9
|
||||
38 10
|
||||
38 11
|
||||
38 12
|
||||
38 13
|
||||
38 14
|
||||
38 15
|
||||
38 16
|
||||
38 17
|
||||
38 18
|
||||
38 19
|
||||
38 20
|
||||
38 21
|
||||
38 22
|
||||
38 23
|
||||
38 24
|
||||
38 25
|
||||
38 26
|
||||
38 27
|
||||
38 28
|
||||
38 29
|
||||
38 30
|
||||
38 31
|
||||
38 32
|
||||
38 33
|
||||
38 34
|
||||
38 35
|
||||
38 36
|
||||
39 1
|
||||
39 2
|
||||
39 3
|
||||
39 4
|
||||
39 5
|
||||
39 6
|
||||
39 7
|
||||
39 8
|
||||
39 10
|
||||
39 11
|
||||
39 12
|
||||
39 13
|
||||
39 14
|
||||
39 15
|
||||
39 16
|
||||
39 17
|
||||
39 18
|
||||
39 19
|
||||
39 20
|
||||
39 21
|
||||
39 22
|
||||
39 23
|
||||
39 24
|
||||
39 25
|
||||
39 26
|
||||
39 27
|
||||
39 28
|
||||
39 29
|
||||
39 30
|
||||
39 31
|
||||
39 32
|
||||
39 33
|
||||
39 34
|
||||
39 35
|
||||
39 36
|
||||
40 1
|
||||
40 2
|
||||
40 4
|
||||
40 5
|
||||
40 6
|
||||
40 7
|
||||
40 8
|
||||
40 9
|
||||
40 10
|
||||
40 11
|
||||
40 12
|
||||
40 13
|
||||
40 14
|
||||
40 15
|
||||
40 16
|
||||
40 17
|
||||
40 18
|
||||
40 19
|
||||
40 20
|
||||
40 21
|
||||
40 22
|
||||
40 23
|
||||
40 24
|
||||
40 25
|
||||
40 26
|
||||
40 27
|
||||
40 28
|
||||
40 29
|
||||
40 30
|
||||
40 31
|
||||
40 32
|
||||
40 33
|
||||
40 34
|
||||
40 35
|
||||
40 36
|
||||
40 37
|
||||
40 38
|
||||
40 39
|
||||
41 1
|
||||
41 2
|
||||
41 3
|
||||
41 4
|
||||
41 6
|
||||
41 7
|
||||
41 8
|
||||
41 9
|
||||
41 10
|
||||
41 11
|
||||
41 12
|
||||
41 13
|
||||
41 14
|
||||
41 15
|
||||
41 16
|
||||
41 17
|
||||
41 18
|
||||
41 19
|
||||
41 20
|
||||
41 21
|
||||
41 22
|
||||
41 23
|
||||
41 24
|
||||
41 25
|
||||
41 26
|
||||
41 27
|
||||
41 28
|
||||
41 29
|
||||
41 30
|
||||
41 31
|
||||
41 32
|
||||
41 33
|
||||
41 34
|
||||
41 35
|
||||
41 36
|
||||
41 37
|
||||
41 38
|
||||
41 39
|
||||
42 1
|
||||
42 2
|
||||
42 3
|
||||
42 4
|
||||
42 5
|
||||
42 6
|
||||
42 7
|
||||
42 9
|
||||
42 10
|
||||
42 11
|
||||
42 12
|
||||
42 13
|
||||
42 14
|
||||
42 15
|
||||
42 16
|
||||
42 17
|
||||
42 18
|
||||
42 19
|
||||
42 20
|
||||
42 21
|
||||
42 22
|
||||
42 23
|
||||
42 24
|
||||
42 25
|
||||
42 26
|
||||
42 27
|
||||
42 28
|
||||
42 29
|
||||
42 30
|
||||
42 31
|
||||
42 32
|
||||
42 33
|
||||
42 34
|
||||
42 35
|
||||
42 36
|
||||
42 37
|
||||
42 38
|
||||
42 39
|
||||
43 1
|
||||
43 2
|
||||
43 4
|
||||
43 5
|
||||
43 6
|
||||
43 7
|
||||
43 8
|
||||
43 9
|
||||
43 10
|
||||
43 11
|
||||
43 12
|
||||
43 13
|
||||
43 14
|
||||
43 15
|
||||
43 16
|
||||
43 17
|
||||
43 18
|
||||
43 19
|
||||
43 20
|
||||
43 21
|
||||
43 22
|
||||
43 23
|
||||
43 24
|
||||
43 25
|
||||
43 26
|
||||
43 27
|
||||
43 28
|
||||
43 29
|
||||
43 30
|
||||
43 31
|
||||
43 32
|
||||
43 33
|
||||
43 34
|
||||
43 35
|
||||
43 36
|
||||
43 37
|
||||
43 38
|
||||
43 39
|
||||
43 40
|
||||
43 41
|
||||
43 42
|
||||
44 1
|
||||
44 2
|
||||
44 3
|
||||
44 5
|
||||
44 6
|
||||
44 7
|
||||
44 8
|
||||
44 9
|
||||
44 10
|
||||
44 11
|
||||
44 12
|
||||
44 13
|
||||
44 14
|
||||
44 15
|
||||
44 16
|
||||
44 17
|
||||
44 18
|
||||
44 19
|
||||
44 20
|
||||
44 21
|
||||
44 22
|
||||
44 23
|
||||
44 24
|
||||
44 25
|
||||
44 26
|
||||
44 27
|
||||
44 28
|
||||
44 29
|
||||
44 30
|
||||
44 31
|
||||
44 32
|
||||
44 33
|
||||
44 34
|
||||
44 35
|
||||
44 36
|
||||
44 37
|
||||
44 38
|
||||
44 39
|
||||
44 40
|
||||
44 41
|
||||
44 42
|
||||
45 1
|
||||
45 2
|
||||
45 3
|
||||
45 4
|
||||
45 5
|
||||
45 6
|
||||
45 8
|
||||
45 9
|
||||
45 10
|
||||
45 11
|
||||
45 12
|
||||
45 13
|
||||
45 14
|
||||
45 15
|
||||
45 16
|
||||
45 17
|
||||
45 18
|
||||
45 19
|
||||
45 20
|
||||
45 21
|
||||
45 22
|
||||
45 23
|
||||
45 24
|
||||
45 25
|
||||
45 26
|
||||
45 27
|
||||
45 28
|
||||
45 29
|
||||
45 30
|
||||
45 31
|
||||
45 32
|
||||
45 33
|
||||
45 34
|
||||
45 35
|
||||
45 36
|
||||
45 37
|
||||
45 38
|
||||
45 39
|
||||
45 40
|
||||
45 41
|
||||
45 42
|
@ -0,0 +1,171 @@
|
||||
40
|
||||
7 1
|
||||
8 1
|
||||
11 1
|
||||
12 1
|
||||
13 1
|
||||
22 1
|
||||
23 1
|
||||
34 1
|
||||
35 1
|
||||
37 1
|
||||
39 1
|
||||
7 2
|
||||
8 2
|
||||
9 2
|
||||
11 2
|
||||
12 2
|
||||
13 2
|
||||
22 2
|
||||
23 2
|
||||
35 2
|
||||
36 2
|
||||
39 2
|
||||
14 3
|
||||
15 3
|
||||
16 3
|
||||
17 3
|
||||
18 3
|
||||
36 3
|
||||
39 3
|
||||
17 4
|
||||
36 4
|
||||
37 4
|
||||
39 4
|
||||
6 5
|
||||
34 5
|
||||
35 5
|
||||
39 5
|
||||
7 6
|
||||
35 6
|
||||
39 6
|
||||
8 7
|
||||
9 7
|
||||
11 7
|
||||
12 7
|
||||
13 7
|
||||
35 7
|
||||
39 7
|
||||
9 8
|
||||
10 8
|
||||
20 8
|
||||
21 8
|
||||
22 8
|
||||
23 8
|
||||
24 8
|
||||
35 8
|
||||
38 8
|
||||
39 8
|
||||
10 9
|
||||
35 9
|
||||
36 9
|
||||
39 9
|
||||
35 10
|
||||
36 10
|
||||
39 10
|
||||
19 11
|
||||
35 11
|
||||
36 11
|
||||
39 11
|
||||
19 12
|
||||
26 12
|
||||
35 12
|
||||
36 12
|
||||
38 12
|
||||
39 12
|
||||
35 13
|
||||
36 13
|
||||
38 13
|
||||
39 13
|
||||
25 14
|
||||
26 14
|
||||
27 14
|
||||
28 14
|
||||
29 14
|
||||
36 14
|
||||
39 14
|
||||
19 15
|
||||
25 15
|
||||
26 15
|
||||
27 15
|
||||
28 15
|
||||
29 15
|
||||
36 15
|
||||
39 15
|
||||
19 16
|
||||
27 16
|
||||
36 16
|
||||
39 16
|
||||
36 17
|
||||
39 17
|
||||
19 18
|
||||
25 18
|
||||
26 18
|
||||
27 18
|
||||
29 18
|
||||
32 18
|
||||
36 18
|
||||
39 18
|
||||
33 19
|
||||
36 19
|
||||
38 19
|
||||
39 19
|
||||
36 20
|
||||
38 20
|
||||
39 20
|
||||
33 21
|
||||
36 21
|
||||
38 21
|
||||
39 21
|
||||
27 22
|
||||
28 22
|
||||
30 22
|
||||
31 22
|
||||
32 22
|
||||
33 22
|
||||
35 22
|
||||
36 22
|
||||
38 22
|
||||
39 22
|
||||
30 23
|
||||
32 23
|
||||
33 23
|
||||
35 23
|
||||
36 23
|
||||
38 23
|
||||
39 23
|
||||
36 24
|
||||
38 24
|
||||
39 24
|
||||
36 25
|
||||
38 25
|
||||
39 25
|
||||
36 26
|
||||
38 26
|
||||
39 26
|
||||
30 27
|
||||
36 27
|
||||
38 27
|
||||
39 27
|
||||
36 28
|
||||
38 28
|
||||
39 28
|
||||
36 29
|
||||
38 29
|
||||
39 29
|
||||
36 30
|
||||
38 30
|
||||
39 30
|
||||
32 31
|
||||
36 31
|
||||
38 31
|
||||
39 31
|
||||
36 32
|
||||
38 32
|
||||
39 32
|
||||
36 33
|
||||
38 33
|
||||
39 33
|
||||
37 34
|
||||
36 35
|
||||
37 35
|
@ -0,0 +1,31 @@
|
||||
20
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 8
|
||||
8 9
|
||||
9 0
|
||||
10 13
|
||||
11 14
|
||||
12 15
|
||||
13 16
|
||||
14 17
|
||||
15 18
|
||||
16 19
|
||||
17 10
|
||||
18 11
|
||||
19 12
|
||||
0 10
|
||||
1 11
|
||||
2 12
|
||||
3 13
|
||||
4 14
|
||||
5 15
|
||||
6 16
|
||||
7 17
|
||||
8 18
|
||||
9 19
|
@ -0,0 +1,219 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <signal.h>
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
double x;
|
||||
double y;
|
||||
} Node;
|
||||
|
||||
typedef struct {
|
||||
size_t start;
|
||||
size_t end;
|
||||
} Edge;
|
||||
|
||||
|
||||
// Varibili globali
|
||||
int peso;
|
||||
int node_count = 0;
|
||||
int edge_count= 0;
|
||||
volatile sig_atomic_t stop = 0; // Variabile volatile per indicare l'interruzione
|
||||
double scaleFactor; // Fattore di scala iniziale
|
||||
double offsetX; // Offeset iniziale
|
||||
double offsetY;
|
||||
|
||||
|
||||
|
||||
void handle_signal(int sig) {
|
||||
if (sig == SIGINT) {
|
||||
stop = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Prototipi delle funzioni
|
||||
void handle_signal(int sig);
|
||||
void drawGraph(SDL_Renderer* renderer, Node *nodes, Edge *edges, int screenWidth, int screenHeight);
|
||||
void getMaxNodeDimensions(double* maxX, double* maxY, Node *nodes);
|
||||
|
||||
|
||||
// Funzione principale
|
||||
int main(int argc, char* argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Uso corretto: %s nome_file\n", argv[0]);
|
||||
return 1; // Esce dal programma con codice di errore
|
||||
}
|
||||
char* file_name = argv[1];
|
||||
FILE* input = fopen(file_name, "r");
|
||||
if (!input) {
|
||||
printf("Il file non esiste.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Lettura del numero di nodi e peso (che non viene utilizzato qui)
|
||||
fscanf(input, "%d %*d", &node_count);
|
||||
|
||||
// Allocazione dinamica degli array di nodi
|
||||
Node *nodes = malloc(node_count * sizeof(Node));
|
||||
|
||||
// Lettura delle coordinate dei nodi
|
||||
for (int i = 0; i < node_count; i++) {
|
||||
fscanf(input, "%*d %lf %lf\n", &nodes[i].x, &nodes[i].y);
|
||||
}
|
||||
|
||||
// Lettura del numero di archi
|
||||
fscanf(input, "%d", &edge_count);
|
||||
|
||||
// Allocazione dinamica degli array di archi
|
||||
Edge *edges = malloc(edge_count * sizeof(Edge));
|
||||
|
||||
// Lettura degli indici degli archi
|
||||
for (int i = 0; i < edge_count; i++) {
|
||||
fscanf(input, "%zu %zu\n", &edges[i].start, &edges[i].end);
|
||||
}
|
||||
|
||||
fclose(input);
|
||||
|
||||
|
||||
|
||||
|
||||
// Initialize SDL
|
||||
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
||||
fprintf(stderr, "SDL_Init Error: %s\n", SDL_GetError());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
SDL_DisplayMode display_mode;
|
||||
if (SDL_GetDesktopDisplayMode(0, &display_mode) != 0) {
|
||||
fprintf(stderr, "SDL_GetDesktopDisplayMode Error: %s\n", SDL_GetError());
|
||||
SDL_Quit();
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
int screenWidth = display_mode.w - 10;
|
||||
int screenHeight = display_mode.h - 10;
|
||||
SDL_Window* window = SDL_CreateWindow("Graph Visualization",
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
screenWidth, screenHeight,
|
||||
SDL_WINDOW_FULLSCREEN);
|
||||
if (window == NULL) {
|
||||
printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
|
||||
SDL_Quit();
|
||||
return 1;
|
||||
}
|
||||
|
||||
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
|
||||
if (renderer == NULL) {
|
||||
printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError());
|
||||
SDL_DestroyWindow(window);
|
||||
SDL_Quit();
|
||||
return 1;
|
||||
}
|
||||
|
||||
double maX, maY;
|
||||
getMaxNodeDimensions(&maX, &maY, nodes);// Calcola le dimensioni massime dei nodi per adattare le dimensioni della finestra
|
||||
scaleFactor = fmin(screenWidth / (2 * maX), screenHeight / (2 * maY));
|
||||
offsetX = 0.0;
|
||||
offsetY = 0.0;
|
||||
//drawGraph(renderer, &graph, screenWidth, screenHeight); // Disegno il grafico
|
||||
signal(SIGINT, handle_signal); // Gestore di segnale, chiama handle_signal quando riceve SIGINT
|
||||
SDL_Event e; // Variabile per ricevere un evento
|
||||
int quit = 0;
|
||||
int i = 0;
|
||||
while (!quit && !stop) {
|
||||
while (SDL_PollEvent(&e) != 0) { // Controllo se ci sono eventi
|
||||
if (e.type == SDL_QUIT) {
|
||||
quit = 1;
|
||||
} else if (e.type == SDL_MOUSEWHEEL) { // Scorrere con la rotella del mouse
|
||||
// Zoom in/out
|
||||
if (e.wheel.y > 0) { // Scroll up
|
||||
scaleFactor *= 1.1;
|
||||
} else if (e.wheel.y < 0) { // Scroll down
|
||||
scaleFactor /= 1.1;
|
||||
}
|
||||
//drawGraph(renderer, screenWidth, screenHeight); //Aggiorno il grafico
|
||||
}else if (e.type == SDL_FINGERMOTION){ // Scroll da touchpad
|
||||
if (e.tfinger.fingerId == 0 && e.type == SDL_FINGERMOTION) {
|
||||
// Calcola la differenza di posizione tra due dita
|
||||
double scrollDistance = sqrt(pow(e.tfinger.dx, 2) + pow(e.tfinger.dy, 2));
|
||||
// Aggiorna scaleFactor in base a scrollDistance e alla direzione del movimento
|
||||
scaleFactor *= scrollDistance > 0 ? (1.0 + scrollDistance * 0.01) : 1.0; // Aumento o diminuzione dello scale factor in base alla direzione
|
||||
//drawGraph(renderer, screenWidth, screenHeight);
|
||||
}
|
||||
|
||||
}
|
||||
else if (e.type == SDL_KEYDOWN) {
|
||||
// Gestione del movimento con i tasti freccia
|
||||
switch (e.key.keysym.sym) {
|
||||
case SDLK_LEFT:
|
||||
offsetX += 500.0* (1/scaleFactor); // Spostamento a sinistra di 10 pixel
|
||||
//drawGraph(renderer, screenWidth, screenHeight); //Aggiorno il grafico
|
||||
break;
|
||||
case SDLK_RIGHT:
|
||||
offsetX -= 500.0* (1/scaleFactor); // Spostamento a destra di 10 pixel
|
||||
//drawGraph(renderer, screenWidth, screenHeight); //Aggiorno il grafico
|
||||
break;
|
||||
case SDLK_UP:
|
||||
offsetY += 500.0* (1/scaleFactor); // Spostamento verso l'alto di 10 pixel
|
||||
//drawGraph(renderer, screenWidth, screenHeight); //Aggiorno il grafico
|
||||
break;
|
||||
case SDLK_DOWN:
|
||||
offsetY -= 500.0* (1/scaleFactor); // Spostamento verso il basso di 10 pixel
|
||||
//drawGraph(renderer, screenWidth, screenHeight); //Aggiorno il grafico
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
drawGraph(renderer,nodes,edges,screenWidth, screenHeight);
|
||||
}
|
||||
|
||||
// Cleanup SDL
|
||||
SDL_DestroyRenderer(renderer);
|
||||
SDL_DestroyWindow(window);
|
||||
SDL_Quit();
|
||||
|
||||
return 0;
|
||||
}
|
||||
void drawGraph(SDL_Renderer* renderer, Node *nodes, Edge *edges, int screenWidth, int screenHeight) {
|
||||
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); // Colore bianco
|
||||
SDL_RenderClear(renderer); // Pulisce lo schermo
|
||||
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // Colore nero per gli archi
|
||||
for (size_t i = 0; i < edge_count; i++) {
|
||||
size_t node1 = edges[i].start;
|
||||
size_t node2 = edges[i].end;
|
||||
SDL_RenderDrawLine(renderer,
|
||||
(int)((nodes[node1].x + offsetX) * scaleFactor + screenWidth / 2),
|
||||
(int)((nodes[node1].y + offsetY) * scaleFactor + screenHeight / 2),
|
||||
(int)((nodes[node2].x + offsetX) * scaleFactor + screenWidth / 2),
|
||||
(int)((nodes[node2].y + offsetY) * scaleFactor + screenHeight / 2)); //Disegna la linea tra due punti
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); // Colore rosso per i nodi
|
||||
for (size_t i = 0; i < node_count; i++) {
|
||||
int x = (int)((nodes[i].x + offsetX) * scaleFactor + screenWidth / 2);
|
||||
int y = (int)((nodes[i].y + offsetY) * scaleFactor + screenHeight / 2);
|
||||
SDL_Rect rect = {x - (2* scaleFactor), y - (2* scaleFactor), 4* scaleFactor, 4* scaleFactor};
|
||||
SDL_RenderFillRect(renderer, &rect); //Disegno i nodi
|
||||
}
|
||||
SDL_RenderPresent(renderer); // Disegna su schermo
|
||||
}
|
||||
|
||||
|
||||
void getMaxNodeDimensions(double* maxX, double* maxY, Node *nodes) { // Trova le coordinate massime dei nodi, in valore assoluto
|
||||
*maxX = 0.0;
|
||||
*maxY = 0.0;
|
||||
for (size_t i = 0; i < node_count; i++) {
|
||||
if (fabs(nodes[i].x) > *maxX) {
|
||||
*maxX = fabs(nodes[i].x);
|
||||
}
|
||||
if (fabs(nodes[i].y) > *maxY) {
|
||||
*maxY = fabs(nodes[i].y);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
20
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 8
|
||||
8 9
|
||||
9 0
|
||||
10 11
|
||||
11 12
|
||||
12 13
|
||||
13 14
|
||||
14 10
|
||||
15 16
|
||||
16 17
|
||||
17 18
|
||||
18 19
|
||||
19 15
|
||||
0 10
|
||||
2 11
|
||||
4 12
|
||||
6 13
|
||||
8 14
|
||||
1 15
|
||||
3 16
|
||||
5 17
|
||||
7 18
|
||||
9 19
|
@ -0,0 +1,13 @@
|
||||
10
|
||||
0 1
|
||||
1 2
|
||||
1 3
|
||||
1 4
|
||||
4 5
|
||||
5 6
|
||||
6 4
|
||||
2 3
|
||||
3 7
|
||||
7 8
|
||||
8 9
|
||||
9 2
|
@ -0,0 +1,19 @@
|
||||
12
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 0
|
||||
6 8
|
||||
7 9
|
||||
8 10
|
||||
9 11
|
||||
10 6
|
||||
11 7
|
||||
0 6
|
||||
1 7
|
||||
2 8
|
||||
3 9
|
||||
4 10
|
||||
5 11
|
@ -0,0 +1,22 @@
|
||||
14
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 8
|
||||
8 9
|
||||
9 10
|
||||
10 11
|
||||
11 12
|
||||
12 13
|
||||
13 0
|
||||
0 5
|
||||
2 7
|
||||
4 9
|
||||
6 11
|
||||
8 13
|
||||
10 1
|
||||
12 3
|
@ -0,0 +1,31 @@
|
||||
12
|
||||
0 1
|
||||
1 2
|
||||
2 0
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 8
|
||||
8 3
|
||||
9 10
|
||||
10 11
|
||||
11 9
|
||||
0 3
|
||||
0 4
|
||||
0 8
|
||||
1 4
|
||||
1 5
|
||||
1 6
|
||||
2 6
|
||||
2 7
|
||||
2 8
|
||||
9 3
|
||||
9 4
|
||||
9 5
|
||||
10 5
|
||||
10 6
|
||||
10 7
|
||||
11 7
|
||||
11 8
|
||||
11 3
|
@ -0,0 +1,357 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <mpi.h>
|
||||
|
||||
// Definizione di alcune costanti globali
|
||||
#define PI 3.14159265358979323
|
||||
#define TEMPERATURE_DECAY_RATE 0.98
|
||||
#define MIN_DISTANCE 10.0 // Distanza minima tra i nodi
|
||||
|
||||
// Strutture
|
||||
typedef struct {
|
||||
double x;
|
||||
double y;
|
||||
} Force;
|
||||
|
||||
typedef struct {
|
||||
double x;
|
||||
double y;
|
||||
} Node;
|
||||
|
||||
typedef struct {
|
||||
size_t start;
|
||||
size_t end;
|
||||
} Edge;
|
||||
|
||||
typedef struct {
|
||||
Node* nodes;
|
||||
Edge* edges;
|
||||
size_t node_count;
|
||||
size_t edge_count;
|
||||
} SimpleGraph;
|
||||
|
||||
|
||||
// Prototipi delle funzioni
|
||||
SimpleGraph readGraphFile(char* file_name);
|
||||
void calculateRepulsion(Force* net_forces, SimpleGraph* graph, size_t start, size_t end);
|
||||
void calculateAttraction(Force* net_forces, SimpleGraph* graph, size_t start, size_t end);
|
||||
Force* initializeForceVector(SimpleGraph graph);
|
||||
void moveNodes(Force* net_forces, SimpleGraph* graph, size_t start, size_t end);
|
||||
void getMaxNodeDimensions(SimpleGraph* graph, double* maxX, double* maxY);
|
||||
|
||||
|
||||
int peso;
|
||||
double temperature;
|
||||
double k; // Distanza ideale
|
||||
double scaleFactor; // Fattore di scala iniziale
|
||||
double offsetX; // Offset iniziale
|
||||
double offsetY;
|
||||
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
MPI_Init(&argc, &argv);
|
||||
|
||||
int rank, size;
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
||||
MPI_Comm_size(MPI_COMM_WORLD, &size);
|
||||
|
||||
if (argc < 5) {
|
||||
if (rank == 0) {
|
||||
printf("Uso corretto: %s nome_file iterazioni temperatura peso\n", argv[0]);
|
||||
}
|
||||
MPI_Finalize();
|
||||
return 1; // Esce dal programma con codice di errore
|
||||
}
|
||||
|
||||
char* file_name = argv[1];
|
||||
int it = atoi(argv[2]);
|
||||
temperature = atof(argv[3]);
|
||||
peso = atoi(argv[4]);
|
||||
|
||||
SimpleGraph graph;
|
||||
if (rank == 0) {
|
||||
graph = readGraphFile(file_name);
|
||||
}
|
||||
|
||||
// Broadcast del numero di nodi e archi a tutti i processi
|
||||
MPI_Bcast(&graph.node_count, 1, MPI_UNSIGNED_LONG, 0, MPI_COMM_WORLD);
|
||||
MPI_Bcast(&graph.edge_count, 1, MPI_UNSIGNED_LONG, 0, MPI_COMM_WORLD);
|
||||
|
||||
if (rank != 0) {
|
||||
graph.nodes = malloc(graph.node_count * sizeof(Node));
|
||||
graph.edges = malloc(graph.edge_count * sizeof(Edge));
|
||||
}
|
||||
MPI_Bcast(graph.nodes, graph.node_count * sizeof(Node), MPI_BYTE, 0, MPI_COMM_WORLD);
|
||||
MPI_Bcast(graph.edges, graph.edge_count * sizeof(Edge), MPI_BYTE, 0, MPI_COMM_WORLD);
|
||||
double screenWidth = 2240 - 10;
|
||||
double screenHeight = 1400 - 10;
|
||||
k = sqrt((screenWidth * screenHeight) / graph.node_count);
|
||||
|
||||
|
||||
double offsetX = 0.0;
|
||||
double offsetY = 0.0;
|
||||
Force* net_forces = initializeForceVector(graph);
|
||||
double maxX, maxY;
|
||||
getMaxNodeDimensions(&graph, &maxX, &maxY);
|
||||
double scaleFactor = fmin(screenWidth / (2 * maxX), screenHeight / (2 * maxY));
|
||||
if (!net_forces) {
|
||||
fprintf(stderr, "Error allocating memory for forces\n");
|
||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
}
|
||||
for (int i = 0; i < it; i++) {
|
||||
calculateRepulsion(net_forces, &graph, rank * graph.node_count / size, (rank + 1) * graph.node_count / size);
|
||||
calculateAttraction(net_forces, &graph, rank * graph.edge_count / size, (rank + 1) * graph.edge_count / size);
|
||||
MPI_Barrier(MPI_COMM_WORLD);
|
||||
if (rank == 0) {
|
||||
Force* dati = initializeForceVector(graph);
|
||||
// Buffer per ricevere tutte le forze dai processi
|
||||
Force* all_forces = malloc(size * graph.node_count * sizeof(Force));
|
||||
|
||||
// Array per i counts e i displacements
|
||||
int* counts = malloc(size * sizeof(int)); //Numero di elementi ricevuti da ogni processo
|
||||
int* displacements = malloc(size * sizeof(int)); //Index di partenza
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
counts[i] = graph.node_count * sizeof(Force);
|
||||
displacements[i] = i * graph.node_count * sizeof(Force);
|
||||
}
|
||||
|
||||
// Raccoglie le forze da tutti i processi
|
||||
MPI_Gatherv(net_forces, graph.node_count * sizeof(Force), MPI_BYTE,
|
||||
all_forces, counts, displacements, MPI_BYTE,
|
||||
0, MPI_COMM_WORLD);
|
||||
|
||||
// Somma le forze ricevute
|
||||
for (int i = 0; i < size; i++) {
|
||||
for (int j = 0; j < graph.node_count; j++) {
|
||||
net_forces[j].x += all_forces[i * graph.node_count + j].x;
|
||||
net_forces[j].y += all_forces[i * graph.node_count + j].y;
|
||||
}
|
||||
}
|
||||
|
||||
moveNodes(net_forces, &graph, 0, graph.node_count);
|
||||
|
||||
// Libera la memoria allocata
|
||||
free(all_forces);
|
||||
free(counts);
|
||||
free(displacements);
|
||||
} else {
|
||||
// Invio delle forze al processo radice
|
||||
MPI_Gatherv(net_forces, graph.node_count * sizeof(Force), MPI_BYTE,
|
||||
NULL, NULL, NULL, MPI_BYTE,
|
||||
0, MPI_COMM_WORLD);
|
||||
}
|
||||
MPI_Barrier(MPI_COMM_WORLD);
|
||||
if (temperature > 1.0) {
|
||||
temperature *= TEMPERATURE_DECAY_RATE;
|
||||
}
|
||||
|
||||
MPI_Bcast(graph.nodes, graph.node_count * sizeof(Node), MPI_BYTE, 0, MPI_COMM_WORLD);
|
||||
for (int i = 0; i< graph.node_count; i++){
|
||||
net_forces[i].x = 0.0;
|
||||
net_forces[i].y = 0.0;
|
||||
}
|
||||
MPI_Barrier(MPI_COMM_WORLD);
|
||||
|
||||
}
|
||||
|
||||
if (rank == 0) {
|
||||
FILE* output = fopen("out.txt", "w");
|
||||
if (!output) {
|
||||
printf("Impossibile aprire il file di output per la scrittura.\n");
|
||||
MPI_Finalize();
|
||||
return 0;
|
||||
}
|
||||
fprintf(output, "%zu %d\n", graph.node_count, peso);
|
||||
|
||||
// Scrivi le posizioni dei nodi
|
||||
for (size_t i = 0; i < graph.node_count; i++) {
|
||||
fprintf(output, "%zu %f %f\n", i, graph.nodes[i].x, graph.nodes[i].y);
|
||||
}
|
||||
|
||||
fprintf(output, "%zu\n", graph.edge_count);
|
||||
|
||||
// Scrivi gli archi
|
||||
for (size_t i = 0; i < graph.edge_count; i++) {
|
||||
fprintf(output, "%zu %zu\n", graph.edges[i].start, graph.edges[i].end);
|
||||
}
|
||||
|
||||
fclose(output);
|
||||
}
|
||||
|
||||
free(graph.nodes);
|
||||
free(graph.edges);
|
||||
MPI_Finalize();
|
||||
return 0;
|
||||
}
|
||||
|
||||
SimpleGraph readGraphFile(char* file_name) {
|
||||
FILE* input = fopen(file_name, "r");
|
||||
if (!input) {
|
||||
fprintf(stderr, "Error opening file\n");
|
||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
}
|
||||
SimpleGraph graph;
|
||||
fscanf(input, "%zu", &graph.node_count); // Legge il numero totale di nodi
|
||||
|
||||
// Creazione di un array temporaneo per memorizzare i dati degli archi
|
||||
size_t temp_capacity = 100; // Capacità iniziale, aumenta dinamicamente se necessario
|
||||
size_t temp_edge_count = 0;
|
||||
Edge* temp_edges = malloc(temp_capacity * sizeof(Edge));
|
||||
|
||||
if (!temp_edges) {
|
||||
fprintf(stderr, "Error allocating memory for edges\n");
|
||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
}
|
||||
|
||||
size_t node1, node2;
|
||||
double pesett;
|
||||
|
||||
if (!peso) { // Se non è presente il peso, legge due alla volta
|
||||
while (fscanf(input, "%zu %zu", &node1, &node2) == 2) {
|
||||
if (temp_edge_count >= temp_capacity) {
|
||||
// Aumenta la capacità dell'array temporaneo
|
||||
temp_capacity *= 2;
|
||||
temp_edges = realloc(temp_edges, temp_capacity * sizeof(Edge));
|
||||
if (!temp_edges) {
|
||||
fprintf(stderr, "Error reallocating memory for edges\n");
|
||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
}
|
||||
}
|
||||
temp_edges[temp_edge_count].start = node1;
|
||||
temp_edges[temp_edge_count].end = node2;
|
||||
temp_edge_count++;
|
||||
}
|
||||
} else { // Se è presente il peso, legge tre alla volta
|
||||
while (fscanf(input, "%zu %zu %lf", &node1, &node2, &pesett) == 3) {
|
||||
if (temp_edge_count >= temp_capacity) {
|
||||
// Aumenta la capacità dell'array temporaneo
|
||||
temp_capacity *= 2;
|
||||
temp_edges = realloc(temp_edges, temp_capacity * sizeof(Edge));
|
||||
if (!temp_edges) {
|
||||
fprintf(stderr, "Error reallocating memory for edges\n");
|
||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
}
|
||||
}
|
||||
temp_edges[temp_edge_count].start = node1;
|
||||
temp_edges[temp_edge_count].end = node2;
|
||||
temp_edge_count++;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(input);
|
||||
|
||||
graph.nodes = malloc(graph.node_count * sizeof(Node));
|
||||
if (!graph.nodes) {
|
||||
fprintf(stderr, "Error allocating memory for nodes\n");
|
||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
}
|
||||
|
||||
graph.edges = malloc(temp_edge_count * sizeof(Edge));
|
||||
if (!graph.edges) {
|
||||
fprintf(stderr, "Error allocating memory for edges\n");
|
||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
}
|
||||
|
||||
// Inizializza le posizioni dei nodi
|
||||
for (size_t i = 0; i < graph.node_count; i++) {
|
||||
graph.nodes[i].x = cos((2*PI*i)/graph.node_count);
|
||||
graph.nodes[i].y = sin((2*PI*i)/graph.node_count);
|
||||
}
|
||||
|
||||
memcpy(graph.edges, temp_edges, temp_edge_count * sizeof(Edge));
|
||||
graph.edge_count = temp_edge_count;
|
||||
|
||||
free(temp_edges);
|
||||
return graph;
|
||||
}
|
||||
|
||||
void calculateRepulsion(Force* net_forces, SimpleGraph* graph, size_t start, size_t end) {
|
||||
for (size_t i = start; i < end; i++) {
|
||||
for (size_t j = 0; j < graph->node_count; j++) {
|
||||
if (i != j) {
|
||||
double dx = graph->nodes[i].x - graph->nodes[j].x;
|
||||
double dy = graph->nodes[i].y - graph->nodes[j].y;
|
||||
double distance = sqrt(dx * dx + dy * dy);
|
||||
|
||||
if (distance < MIN_DISTANCE) {
|
||||
distance = MIN_DISTANCE;
|
||||
}
|
||||
|
||||
double force_magnitude = k * k / distance;
|
||||
double force_x = force_magnitude * (dx / distance);
|
||||
double force_y = force_magnitude * (dy / distance);
|
||||
|
||||
net_forces[i].x += force_x;
|
||||
net_forces[i].y += force_y;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void calculateAttraction(Force* net_forces, SimpleGraph* graph, size_t start, size_t end) {
|
||||
for (size_t i = start; i < end; i++) {
|
||||
size_t node1 = graph->edges[i].start;
|
||||
size_t node2 = graph->edges[i].end;
|
||||
double dx = graph->nodes[node2].x - graph->nodes[node1].x;
|
||||
double dy = graph->nodes[node2].y - graph->nodes[node1].y;
|
||||
double distance = sqrt(dx * dx + dy * dy);
|
||||
double force = distance * distance / k;
|
||||
if (distance < MIN_DISTANCE) {
|
||||
distance = MIN_DISTANCE;
|
||||
}
|
||||
net_forces[node1].x += force * dx / distance;
|
||||
net_forces[node1].y += force * dy / distance;
|
||||
net_forces[node2].x -= force * dx / distance;
|
||||
net_forces[node2].y -= force * dy / distance;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Force* initializeForceVector(SimpleGraph graph) {
|
||||
Force* net_forces = malloc(graph.node_count * sizeof(Force));
|
||||
if (!net_forces) {
|
||||
fprintf(stderr, "Error allocating memory for forces\n");
|
||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
}
|
||||
for (size_t i = 0; i < graph.node_count; i++) {
|
||||
net_forces[i].x = 0;
|
||||
net_forces[i].y = 0;
|
||||
}
|
||||
return net_forces;
|
||||
}
|
||||
|
||||
void moveNodes(Force* net_forces, SimpleGraph* graph, size_t start, size_t end) {
|
||||
for (size_t i = start; i < end; i++) {
|
||||
double dx = net_forces[i].x;
|
||||
double dy = net_forces[i].y;
|
||||
|
||||
|
||||
double displacement = sqrt(dx * dx + dy * dy);
|
||||
if (displacement > temperature) {
|
||||
dx = dx / displacement * temperature;
|
||||
dy = dy / displacement * temperature;
|
||||
}
|
||||
|
||||
graph->nodes[i].x += dx;
|
||||
graph->nodes[i].y += dy;
|
||||
}
|
||||
}
|
||||
|
||||
void getMaxNodeDimensions(SimpleGraph* graph, double* maxX, double* maxY) {
|
||||
*maxX = 0.0;
|
||||
*maxY = 0.0;
|
||||
|
||||
for (size_t i = 0; i < graph->node_count; i++) {
|
||||
if (fabs(graph->nodes[i].x) > *maxX) {
|
||||
*maxX = fabs(graph->nodes[i].x);
|
||||
}
|
||||
if (fabs(graph->nodes[i].y) > *maxY) {
|
||||
*maxY = fabs(graph->nodes[i].y);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
16
|
||||
1 2 2012
|
||||
1 3 2012
|
||||
4 5 2012
|
||||
4 6 2012
|
||||
4 7 2012
|
||||
4 8 2012
|
||||
4 9 2012
|
||||
10 6 2012
|
||||
10 9 2012
|
||||
10 7 2012
|
||||
10 11 2012
|
||||
2 12 2012
|
||||
2 3 2012
|
||||
13 14 2012
|
||||
13 6 2012
|
||||
7 6 2012
|
||||
7 9 2012
|
||||
7 11 2012
|
||||
11 6 2012
|
||||
11 9 2012
|
||||
6 5 2012
|
||||
6 14 2012
|
||||
6 8 2012
|
||||
6 9 2012
|
||||
5 9 2012
|
||||
4 10 2013
|
||||
4 9 2013
|
||||
4 8 2013
|
||||
4 11 2013
|
||||
4 6 2013
|
||||
4 7 2013
|
||||
15 5 2013
|
||||
10 6 2013
|
||||
10 9 2013
|
||||
10 7 2013
|
||||
10 11 2013
|
||||
2 3 2013
|
||||
13 14 2013
|
||||
13 6 2013
|
||||
7 6 2013
|
||||
7 9 2013
|
||||
7 11 2013
|
||||
11 6 2013
|
||||
11 9 2013
|
||||
6 9 2013
|
@ -0,0 +1,33 @@
|
||||
16
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 0
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 4
|
||||
0 4
|
||||
1 5
|
||||
2 6
|
||||
3 7
|
||||
8 9
|
||||
9 10
|
||||
10 11
|
||||
11 8
|
||||
12 13
|
||||
13 14
|
||||
14 15
|
||||
15 12
|
||||
8 12
|
||||
9 13
|
||||
10 14
|
||||
11 15
|
||||
0 8
|
||||
1 9
|
||||
2 10
|
||||
3 11
|
||||
4 12
|
||||
5 13
|
||||
6 14
|
||||
7 15
|
@ -0,0 +1,19 @@
|
||||
12
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 6
|
||||
6 7
|
||||
7 8
|
||||
8 0
|
||||
9 10
|
||||
10 11
|
||||
11 9
|
||||
0 9
|
||||
3 10
|
||||
6 11
|
||||
1 5
|
||||
4 8
|
||||
7 2
|
Loading…
Reference in New Issue