diff options
Diffstat (limited to 'dis/Transitive/transitive.c')
-rw-r--r-- | dis/Transitive/transitive.c | 92 |
1 files changed, 47 insertions, 45 deletions
diff --git a/dis/Transitive/transitive.c b/dis/Transitive/transitive.c index 5fa52e8..303216f 100644 --- a/dis/Transitive/transitive.c +++ b/dis/Transitive/transitive.c | |||
@@ -45,20 +45,21 @@ int main(int argc, char** argv){ | |||
45 | unsigned int i, j, k; | 45 | unsigned int i, j, k; |
46 | int seed; | 46 | int seed; |
47 | 47 | ||
48 | time_t startTime; | 48 | time_t startTime, stopTime; |
49 | unsigned int sum; | 49 | unsigned int sum; |
50 | 50 | volatile int realRes = 0; | |
51 | fscanf(stdin,"%d %d %d", &n, &m, &seed); | 51 | |
52 | assert(fscanf(stdin,"%d %d %d", &n, &m, &seed) == 3); | ||
52 | 53 | ||
53 | assert((n >= MIN_VERTICES) && (n <= MAX_VERTICES)); | 54 | assert((n >= MIN_VERTICES) && (n <= MAX_VERTICES)); |
54 | assert((m >= MIN_EDGES) && (m <= MAX_EDGES)); | 55 | assert((m >= MIN_EDGES) && (m <= MAX_EDGES)); |
55 | assert (m <= n*n); | 56 | assert(m <= n*n); |
56 | assert ((seed >= MIN_SEED) && (seed <= MAX_SEED)); | 57 | assert((seed >= MIN_SEED) && (seed <= MAX_SEED)); |
57 | 58 | ||
58 | if ((din = (unsigned int *)malloc(n*n*sizeof(unsigned int))) == NULL) | 59 | if ((din = (unsigned int *)malloc(n*n*sizeof(unsigned int))) == NULL) |
59 | return (-1); | 60 | return (-1); |
60 | if ((dout = (unsigned int *)malloc(n*n*sizeof(unsigned int))) == NULL) | 61 | if ((dout = (unsigned int *)malloc(n*n*sizeof(unsigned int))) == NULL) |
61 | return (-1); | 62 | return (-1); |
62 | 63 | ||
63 | for (i=0; i<n*n; i++){ | 64 | for (i=0; i<n*n; i++){ |
64 | *(din + i) = NO_PATH; | 65 | *(din + i) = NO_PATH; |
@@ -75,53 +76,54 @@ int main(int argc, char** argv){ | |||
75 | SET_UP | 76 | SET_UP |
76 | startTime = time(NULL); | 77 | startTime = time(NULL); |
77 | 78 | ||
79 | START_LOOP | ||
78 | for (k=0; k<n; k++){ | 80 | for (k=0; k<n; k++){ |
79 | unsigned int old; | 81 | unsigned int old; |
80 | unsigned int new1; | 82 | unsigned int new1; |
81 | unsigned int *dtemp; | 83 | unsigned int *dtemp; |
82 | START_LOOP | 84 | |
83 | |||
84 | for (i=0; i<n; i++){ | 85 | for (i=0; i<n; i++){ |
85 | for (j=0; j<n; j++){ | 86 | for (j=0; j<n; j++){ |
86 | old = *(din + j*n + i); | 87 | old = *(din + j*n + i); |
87 | new1 = *(din + j*n + k) + *(din + k*n + i); | 88 | new1 = *(din + j*n + k) + *(din + k*n + i); |
88 | *(dout + j*n + i) = (new1 < old ? new1: old); | 89 | *(dout + j*n + i) = (new1 < old ? new1: old); |
89 | assert (*(dout + j*n + i) <= NO_PATH); | 90 | assert(*(dout + j*n + i) <= NO_PATH); |
90 | assert (*(dout + j*n + i) <= *(din + j*n + i)); | 91 | assert(*(dout + j*n + i) <= *(din + j*n + i)); |
91 | } | 92 | } |
92 | } | 93 | } |
93 | dtemp = dout; | 94 | dtemp = dout; |
94 | dout = din; | 95 | dout = din; |
95 | din = dtemp; | 96 | din = dtemp; |
96 | STOP_LOOP | 97 | } |
97 | } | ||
98 | 98 | ||
99 | startTime = time(NULL) - startTime; | 99 | STOP_LOOP |
100 | 100 | stopTime = time(NULL); | |
101 | for (j=0; j<n; j++){ | 101 | |
102 | sum = 0; | 102 | for (j=0; j<n; j++){ |
103 | for (i=0; i<n; i++){ | 103 | sum = 0; |
104 | if (*(din + j*n + i) != NO_PATH) | ||
105 | sum += *(din + j*n + i); | ||
106 | } | ||
107 | fprintf(stdout, "%u\n", sum); | ||
108 | } | ||
109 | for (i=0; i<n; i++){ | 104 | for (i=0; i<n; i++){ |
110 | sum = 0; | 105 | if (*(din + j*n + i) != NO_PATH) |
111 | for (j=0; j<n; j++){ | 106 | sum += *(din + j*n + i); |
112 | if (*(din + j*n + i) != NO_PATH) | ||
113 | sum += *(din+j*n+i); | ||
114 | } | ||
115 | |||
116 | fprintf(stdout, "%u\n", sum); | ||
117 | } | 107 | } |
118 | 108 | realRes+=sum; | |
119 | fprintf(stdout, " total time = %u seconds. \n", (unsigned int)startTime); | 109 | //fprintf(stdout, "%u ", sum); |
120 | free(din); | 110 | } |
121 | free(dout); | 111 | for (i=0; i<n; i++){ |
122 | WRITE_TO_FILE | 112 | sum = 0; |
123 | return(0); | 113 | for (j=0; j<n; j++){ |
114 | if (*(din + j*n + i) != NO_PATH) | ||
115 | sum += *(din+j*n+i); | ||
116 | } | ||
117 | realRes+=sum; | ||
118 | //fprintf(stdout, "%u ", sum); | ||
124 | } | 119 | } |
120 | fprintf(stderr, "time for transitive stressmark = %f seconds.\n", | ||
121 | difftime(stopTime, startTime)); | ||
122 | free(din); | ||
123 | free(dout); | ||
124 | WRITE_TO_FILE | ||
125 | return(0); | ||
126 | } | ||
125 | 127 | ||
126 | 128 | ||
127 | 129 | ||