Code:
#include <stdio.h>#include <stdlib.h>
#include <stdbool.h>
#define MATRIX_SIZE 4
bool isWord(char* s){
return (!strcmp(s,"CAT") |
!strcmp(s,"CATS") |
!strcmp(s,"TRAM") |
!strcmp(s,"TRAMS") |
!strcmp(s,"TAME") |
!strcmp(s,"CAR") |
!strcmp(s,"CARS") |
!strcmp(s,"RAT") |
!strcmp(s,"RATS") |
!strcmp(s,"RAMP") |
!strcmp(s,"ART") |
!strcmp(s,"CART") |
!strcmp(s,"STAMP") |
!strcmp(s,"TAKEN") |
!strcmp(s,"MEN") |
!strcmp(s,"MAKE") |
!strcmp(s,"TAKE") |
!strcmp(s,"ATE") |
!strcmp(s,"SELL") |
!strcmp(s,"STEEL") |
!strcmp(s,"RACE") |
!strcmp(s,"RAKE") );
}
void append(char* s, char c){
int len = strlen(s);
s[len] = c;
s[len+1] = '\0';
}
int f(char* s, int x, int y, int visitedMap[MATRIX_SIZE][MATRIX_SIZE], char A[MATRIX_SIZE][MATRIX_SIZE]){
int i,j, maxRow, minRow, maxCol, minCol;
if(isWord(s))
printf("%s\n", s);
///ROW
if(x-1>0)
maxRow=x-1;
else
maxRow=0;
if(x+2<MATRIX_SIZE)
minRow=x+2;
else
minRow=MATRIX_SIZE;
///COL
if(y-1>0)
maxCol=y-1;
else
maxCol=0;
if(y+2<MATRIX_SIZE)
minCol=y+2;
else
minCol=MATRIX_SIZE;
for (i = maxRow; i < minRow; i++) {
for (j = maxCol; j <minCol; j++) {
if (visitedMap[i][j] == 1)
continue;
else{
int newVisitedMap[MATRIX_SIZE][MATRIX_SIZE];
memset(newVisitedMap, 0, sizeof(newVisitedMap[0][0]) * MATRIX_SIZE * MATRIX_SIZE);
int p,q;
for (p = 0; p < MATRIX_SIZE; p++) {
for (q = 0; q < MATRIX_SIZE; q++) {
newVisitedMap[p][q] = visitedMap[p][q];
}
}
newVisitedMap[i][j] = 1;
append(s, A[i][j]);
if(isWord(s)){
printf("%s\n", s);
return;
}
f(s,i,j,newVisitedMap, A);
}///END - ELSE
memset(s, 0, sizeof(s));
}///END - FOR(2)
}///END - FOR(1)
}
int printWords(char A[MATRIX_SIZE][MATRIX_SIZE]){
char* s;
int i,j;
memset(s, 0, sizeof(s));
int visitedMap[MATRIX_SIZE][MATRIX_SIZE];
///reset the array
memset(visitedMap, 0, sizeof(visitedMap[0][0]) * MATRIX_SIZE * MATRIX_SIZE);
for(i=0;i<MATRIX_SIZE;i++){
for(j=0;j<MATRIX_SIZE;j++){
append(s, A[i][j]);
visitedMap[i][j] = 1;
f(s,i,j,visitedMap,A);
memset(s, 0, sizeof(s));
memset(visitedMap, 0, sizeof(visitedMap[0][0]) * MATRIX_SIZE * MATRIX_SIZE);
}
}
}
void printMatrix(char A[MATRIX_SIZE][MATRIX_SIZE]){
int i,j;
printf("The matrix is: \n\n");
for(i=0;i<MATRIX_SIZE;i++){
for(j=0;j<MATRIX_SIZE;j++){
printf("| %c |", A[i][j]);
}
printf("\n");
}
printf("\nThe word we found are: \n\n");
}
int main()
{
char A[MATRIX_SIZE][MATRIX_SIZE]={{'C', 'A', 'R', 'T'}, {'E', 'T', 'A', 'K'}, {'E', 'S', 'M', 'E'}, {'L', 'L', 'P', 'N'}};
printMatrix(A);
printWords(A);
}