c语言怎么实现单词搜索
短信预约 -IT技能 免费直播动态提醒
本文小编为大家详细介绍“c语言怎么实现单词搜索”,内容详细,步骤清晰,细节处理妥当,希望这篇“c语言怎么实现单词搜索”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
单词搜索
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
代码解题如下:
int pi,pj;//static int r[100][100];void f(char** board,int n ,int m,int x,int y,char * word,int p,int **r, int *rz){ int a[4][2]={{0,-1},{-1,0},{0,1},{1,0}}; // printf(" %d ",r[x][y]); int nx,ny; int i,j; int cc=0; int l=0; int zx,zy; //printf("%d ",r); // r[x][y]=1; //printf(" --p %d %d ",p,rz); if(m>=3)r[0][3]=0; //printf("%d %c ",r[0][3],word[p]); for(i=0;i<4;i++){ nx=a[i][0]+x; ny=a[i][1]+y; // if(nx==2)printf(" --nx ny %d %d %c",nx,ny,word[p]); if(nx>=0&&nx<=n&&ny>=0&&ny<=m){ if(r[nx][ny]>=1 &&r[nx][ny]<=p*2&&board[nx][ny]==word[p-1]){ r[nx][ny]++; // printf("%d %d ",nx,ny); f(board,n,m,nx,ny,word,p,r,rz); // f(board,n,m,pi,pj,word,p,r,rz); // f(board,n,m,0,0,word,p,r,rz); } if(r[nx][ny]==0){ // printf("ddf sa "); if(board[nx][ny]==word[p]){ for(j=0;j<4&&j!=i;j++){ zx=a[i][0]+x; zy=a[i][1]+y; if(board[zx][zy]==word[p]) { // printf("&& %c %d %d ",word[p],zx,zy); r[zx][zy]=0; // if(zx==0&&zy==3) // printf("r %d %d %d ",r[zx][zy],zx,zy); } } // printf(" nx ny %d %d %c",nx,ny,word[p]); // p++; // cc++; // printf("-- %c",word[p]); r[nx][ny]=1; printf("r %d %d %d %d ",r[nx][ny],nx,ny); f(board,n,m,nx,ny,word,p+1,r,rz); } } } } // printf(" --p %d %d ",p,rz); // if(cc==0){r[x][y]=0;} if(word[p]=='\0') { // printf(" **p %d %d",p,rz); *rz=1;} // // return true;}bool exist(char** board, int boardSize, int* boardColSize, char * word){ int i,j; int n=boardSize-1; int m=boardColSize[0]-1; int p=1; int x=0,y=0; int row; int z,w; int rz=0; // r[x][y]=1; // printf("-- %d ",rz); int **r = (int **)malloc(sizeof(int*) *boardSize ); for(row = 0 ; row < boardSize; row++) { r[row] = (int *)malloc(sizeof(int) * boardColSize[0]); memset(r[row],0,sizeof(int) * boardColSize[0]); }// printf("%d %d ",n,m); for(i=0;i<=n;i++){ for(j=0;j<=m;j++){ // printf("%c ",board[i][j]); if(board[i][j]==word[0]){ for(z=0;z<=n;z++){ for(w=0;w<=m;w++){ r[z][w]=0; // printf("%c ",board[i][j]); } } r[i][j]=1; pi=i; pj=j; f(board,n,m,i,j,word,p,r,&rz); } } } // printf(" zz %d ",rz); if(rz==1)return true; else return false;}
读到这里,这篇“c语言怎么实现单词搜索”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341