C语言题目,求思路求指导我需要编一个程序给两个Txt文档 一个内容是 4乘4的英文字母矩阵,另一个是一个dic字典文件要求程序能够找出字母矩阵中所有可以组成的单词(类似Ruzzle游戏),相邻
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/05 11:44:03
C语言题目,求思路求指导我需要编一个程序给两个Txt文档 一个内容是 4乘4的英文字母矩阵,另一个是一个dic字典文件要求程序能够找出字母矩阵中所有可以组成的单词(类似Ruzzle游戏),相邻
C语言题目,求思路求指导
我需要编一个程序
给两个Txt文档 一个内容是 4乘4的英文字母矩阵,另一个是一个dic字典文件
要求程序能够找出字母矩阵中所有可以组成的单词(类似Ruzzle游戏),相邻的字母可以连接组成单词(上下左右 左上左下右上右下 8个方向)是否为有效单词要通过跟词典文件比较
C语言题目,求思路求指导我需要编一个程序给两个Txt文档 一个内容是 4乘4的英文字母矩阵,另一个是一个dic字典文件要求程序能够找出字母矩阵中所有可以组成的单词(类似Ruzzle游戏),相邻
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 400000
#define L 6
#define BUFF_LEN 150
void insert(char *s);
int find(char *s);
int num=0,root=0,cid=0;
struct Trie
{
int id;
int cnt;
int next[27];
}tree[N];
int main()
{
FILE *fp1;
int i,sl,word_num,cur_num;
char s[BUFF_LEN],d[L]={'a','b','a','c','o','\0'};
fp1=fopen("dic.txt","r");
if(fp1==NULL)
exit(1);
fscanf(fp1,"%d\n",&word_num);
for(i=0;i<27;i++)
tree[0].next[i]=0;
cur_num = 0;
while(fgets(s,BUFF_LEN,fp1) != NULL)
{
//printf("%s %d\n",str,strlen(str));
for(i=0;i < BUFF_LEN;i++)
if(s[i] >= 'A' && s[i] <= 'Z')
s[i] = s[i]+32;
for(i=0;i < BUFF_LEN;i++)
if(s[i] == '\n'){
s[i] = '\0';
break;
}
//printf("tag1\n");
s[BUFF_LEN-1] = '\n';
for(sl=0;sl<strlen(s);sl++)
if(s[sl]=='/' || s[sl] == '?'){
s[sl] = '\0';
break;
}
if(strlen(s)==0)
continue;
s[sl]='\0';
//printf("tag2\n");
//printf("%s %d\n",str,strlen(str));
insert(s);
printf("%d : %s %d\n",cur_num++,s,strlen(s));
}
fclose(fp1);
printf("occur times of d: %d\n",find(d));
return 0;
}
void insert(char *s)
{
int t,i,rt=root;
//printf("%s\n",s);
while(*s)
{
// printf("%c\n",*s);
t=(int)(*s-'a');
if(tree[rt].next[t]==0)
{
num++;
for(i=0;i<27;i++)
tree[num].next[i]=0;
tree[rt].next[t]=num;
}
rt=tree[rt].next[t];
tree[rt].cnt++;
s++;
}
tree[rt].id=++cid;
}
int find(char *s)
{
int t,rt=root;
while(*s)
{
t=*s-'a';
rt=tree[rt].next[t];
if(rt==0)return 0;
s++;
}
return tree[rt].cnt;
}