Code:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define N 4
char matrix[N][N];
void
show(char mat[N][N])
{
int k,j;
for(k=0;k<N;k++)
{
for(j=0;j<N;j++)
{
printf("%c ",mat[k][j]);
}
printf("\n");
}
}
int
graph(int row,int col,char ch[],int p,char mat[N][N])
{
int i,r,row1,col1,counter;
//printf("%d %d %d\n",row,col,p);
int com[8][2]={ {-1,0},
{-1,+1},
{0,+1},
{+1,+1},
{+1,0},
{+1,-1},
{0,-1},
{-1,-1}};
if(mat[row][col]==ch[p])
{
//printf("word=%c \n",mat[row][col]);
mat[row][col]=0;
p=p+1;
}
else
return 0;
//printf("\n\n");
if(strlen(ch)==p)
{
printf("%s\n",ch);
return 1;
}
row1=row;
col1=col;
for(i=0;i<8;i++)
{ row1+=com[i][0];
col1+=com[i][1];
if(mat[row1][col1]>0&&row1>=0&&col1>=0&&row1<N&&col1<N)
{
//printf("grat=%d %d %c\n",row1,col1,mat[row1][col1]);
r=graph(row1,col1,ch,p,mat);
//printf("result=%d %d %d %d\n",row1,col1,p,r);
mat[row1][col1]=matrix[row1][col1];
row1=row;
col1=col;
//printf("result=%d %d %d %d\n",row1,col1,p,r);
if(r==1)
return 1;
}
else
{
row1=row;
col1=col;
}
}
mat[row][col]=matrix[row][col];
//printf("\n\n");
//show(mat);
return 0;
}
struct node
{
char info[20];
struct node *next;
};
typedef struct node node;
node*
getnode(void)
{
node *temp;
temp=(node*)malloc(sizeof(node));
return temp;
}
int
main(int argc,char *argv[])
{
char t,mat[N][N],temp1[50],tempc;
int i=0,j=0,flag=0,r,k;
if(argc<3)
{
printf("could not find dictonary file\n or puzzle file is missing\n");
return 0;
}
FILE *fp,*fp1;
fp=fopen(argv[1],"r+");
fp1=fopen(argv[2],"r+");
while(fscanf(fp1,"%c",&tempc)!=EOF)
{
if(tempc==' ');
else
{
if(tempc=='\n')
{
i++;
j=0;
}
else{
//printf("%d %d %c\n",i,j,tempc);
matrix[i][j++]=tempc;
}
}
}
//show(matrix);
node *start,*ptr;
start=NULL;
ptr=start;
while(fscanf(fp,"%s",temp1)!=EOF)
{
node *temp;
temp=getnode();
strcpy(temp->info,temp1);
temp->next=NULL;
if(ptr==NULL)
{
ptr=temp;
start=temp;
}
else
{
ptr->next=temp;
ptr=ptr->next;
}
temp=NULL;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
mat[i][j]=matrix[i][j];
}
}
//show(mat);
while(start!=NULL)
{
flag=0;
k=0;
t=start->info[0];
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(t==matrix[i][j])
{
r=graph(i,j,start->info,k,mat);
//printf("result=%d %d %d %d\n",i,j,k,r);
mat[i][j]=matrix[i][j];
//printf("\n");
//show(mat);
if(r==1)
{
flag=1;
break;
}
}
}
if(flag==1)
break;
}
start=start->next;
}
return 0;
}
Dictionary(only few words):