Add files via upload

main
Francesco7602 4 months ago committed by GitHub
parent 6aca581981
commit e3dfb777cd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -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

181
10grid

@ -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,10 @@
10
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9

@ -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,2 @@
2
0 1

@ -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

13
3grid

@ -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,11 @@
5
0 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
2 4
3 4

41
5grid

@ -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

File diff suppressed because it is too large Load Diff

25570
bio-dmela

File diff suppressed because it is too large Load Diff

@ -0,0 +1,6 @@
5
0 1
1 2
2 0
0 3
1 4

13423
ca-GrQ

File diff suppressed because it is too large Load Diff

@ -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

13
cube

@ -0,0 +1,13 @@
8
0 1
1 2
2 3
3 0
4 5
5 6
6 7
7 4
0 4
1 5
2 6
3 7

@ -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,12 @@
8
0 7
0 1
1 2
1 3
2 7
3 7
3 4
4 7
4 5
5 6
5 7

@ -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,8 @@
6
0 1
1 2
0 3
1 3
1 4
4 5
5 0

19
durer

@ -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

357
main.c

@ -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

10
star

@ -0,0 +1,10 @@
10
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9

@ -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

@ -0,0 +1,4 @@
3
0 1 .076
0 2 .695
1 2 .4534
Loading…
Cancel
Save