Δημοσιεύτηκε: 04 Μαρ 2012, 02:48
από Ilias95
Πολύ ωραίο το programming project 9 στη σελίδα 179. :)

Η λύση μου:
Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM_CHARS (int) sizeof(alphabeta) / sizeof(alphabeta[0])

#define NUM_ROWS 10
#define NUM_COLUMNS 10

int main(void)
{
int move, row = 0, col = 0;
const char alphabeta[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
char table[NUM_ROWS][NUM_COLUMNS] = {{alphabeta[0]}};

srand((unsigned) time(NULL));

for (int i = 1; i < NUM_CHARS; i++) {
if (table[row+1][col] && table[row-1][col] && table[row][col+1] && table[row][col-1])
break;

while (1) {
move = rand() % 4;
if (move == 0) {
if ((! table[row-1][col]) && row - 1 >= 0) {
row--;
break;
}
}
else if (move == 1) {
if ((! table[row][col+1]) && col + 1 < NUM_COLUMNS) {
col++;
break;
}
}
else if (move == 2) {
if ((! table[row+1][col]) && row + 1 < NUM_ROWS) {
row++;
break;
}
}
else if (move == 3) {
if ((! table[row][col-1]) && col - 1 >= 0) {
col--;
break;
}
}
}
table[row][col] = alphabeta[i];
}

for (row = 0 ; row < NUM_ROWS; row++) {
for (col = 0; col < NUM_COLUMNS; col++)
table[row][col] ? printf("%c ", table[row][col]) : printf(". ");
printf("\n");
}

return 0;
}


Υπάρχει ένα πρόβλημα όμως.
Ο αλγόριθμος δουλεύει σωστά και συνήθως παίρνω το επιθυμητό αποτέλεσμα.
Μερικές φορές όμως όταν τρέχω το πρόγραμμα τερματίζει αμέσως χωρίς να δώσει κάποια έξοδο ή άλλες φορές δεν τερματίζει ποτέ σαν να είναι σε infinite loop.
Μήπως υπάρχει κάποιο πρόβλημα με τις συναρτήσεις srand() και rand() της <stdlib.h>;