the program randomly walks through from element to element always going up, down, left, right by one element. the elements visited by the program will be labeled with the letters a through z in the order visited. If no place for a letter to go then the program terminates.
My problem is that when it reached end of row, it goes to next row and column 0 and populates. I don't want it to go out of bounds or go to next row if at end of row but don't know how to fix it. Otherwise the code works fine.
I would like some help in fixing that and after fixed, please provide some ideas to simplify the code if possible. tks
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (void) {
int i, j, k, direction;
char board[10][10];
const char letters[] = {'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'};
srand ((unsigned) time(NULL));
for (i = 0; i < 10; i++)
for (j = 0; j < 10; j++)
board[i][j] = '.';
i = 0;
j = 0;
k = 1;
board[i][j] = letters[0];
while (k < 26) {
direction = rand() % 4;
switch (direction) {
case 0: if (board[i][j + 1] == '.'){
board[i][j +1] = letters[k]; //move right
k++; j++;}
if (board[i][j + 1] != '.' && board[i + 1][j] != '.' && board[i - 1][j] != '.' && board[i][j - 1] != '.')
k = 27;
break;
case 1: if (board[i + 1][j] == '.') {
board[i + 1][j] = letters[k]; //move down
k++; i++; }
if (board[i][j + 1] != '.' && board[i + 1][j] != '.' && board[i - 1][j] != '.' && board[i][j - 1] != '.')
k = 27;
break;
case 2: if (board[i - 1][j] == '.'){
board[i - 1][j] = letters[k]; //move up
k++; i--; }
if (board[i][j + 1] != '.' && board[i + 1][j] != '.' && board[i - 1][j] != '.' && board[i][j - 1] != '.')
k = 27;
break;
case 3: if (board[i][j - 1] == '.') {
board[i][j - 1] = letters[k]; //move left
k++; j--;}
if (board[i][j + 1] != '.' && board[i + 1][j] != '.' && board[i - 1][j] != '.' && board[i][j - 1] != '.')
k = 27;
break;
}
}
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++)
printf ("%4c", board[i][j]);
printf ("\n");
}
return 0;
}