经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
c语言单词搜索的实现
来源:jb51  时间:2022/4/18 10:11:00  对本文有异议

单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

在这里插入图片描述

代码解题如下:

  1. int pi,pj;
  2. //static int r[100][100];
  3. void f(char** board,int n ,int m,int x,int y,char * word,int p,int **r, int *rz){
  4.  
  5. int a[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
  6. // printf(" %d ",r[x][y]);
  7. int nx,ny;
  8. int i,j;
  9. int cc=0;
  10. int l=0;
  11. int zx,zy;
  12. //printf("%d ",r);
  13. // r[x][y]=1;
  14. //printf(" --p %d %d ",p,rz);
  15. if(m>=3)r[0][3]=0;
  16. //printf("%d %c ",r[0][3],word[p]);
  17. for(i=0;i<4;i++){
  18. nx=a[i][0]+x;
  19. ny=a[i][1]+y;
  20. // if(nx==2)printf(" --nx ny %d %d %c",nx,ny,word[p]);
  21. if(nx>=0&&nx<=n&&ny>=0&&ny<=m){
  22.  
  23. if(r[nx][ny]>=1 &&r[nx][ny]<=p*2&&board[nx][ny]==word[p-1]){
  24. r[nx][ny]++;
  25. // printf("%d %d ",nx,ny);
  26. f(board,n,m,nx,ny,word,p,r,rz);
  27. // f(board,n,m,pi,pj,word,p,r,rz);
  28. // f(board,n,m,0,0,word,p,r,rz);
  29. }
  30.  
  31. if(r[nx][ny]==0){
  32. // printf("ddf sa ");
  33.  
  34. if(board[nx][ny]==word[p]){
  35. for(j=0;j<4&&j!=i;j++){
  36. zx=a[i][0]+x;
  37. zy=a[i][1]+y;
  38. if(board[zx][zy]==word[p]) {
  39. // printf("&& %c %d %d ",word[p],zx,zy);
  40. r[zx][zy]=0;
  41. // if(zx==0&&zy==3)
  42. // printf("r %d %d %d ",r[zx][zy],zx,zy);
  43. }
  44.  
  45. }
  46. // printf(" nx ny %d %d %c",nx,ny,word[p]);
  47. // p++;
  48. // cc++;
  49. // printf("-- %c",word[p]);
  50. r[nx][ny]=1;
  51. printf("r %d %d %d %d ",r[nx][ny],nx,ny);
  52. f(board,n,m,nx,ny,word,p+1,r,rz);
  53. }
  54.  
  55.  
  56. }
  57.  
  58. }
  59. }
  60. // printf(" --p %d %d ",p,rz);
  61. // if(cc==0){r[x][y]=0;}
  62. if(word[p]=='\0') {
  63. // printf(" **p %d %d",p,rz);
  64. *rz=1;}
  65. //
  66. // return true;
  67.  
  68. }
  69.  
  70. bool exist(char** board, int boardSize, int* boardColSize, char * word){
  71.  
  72. int i,j;
  73. int n=boardSize-1;
  74. int m=boardColSize[0]-1;
  75. int p=1;
  76. int x=0,y=0;
  77. int row;
  78. int z,w;
  79. int rz=0;
  80. // r[x][y]=1;
  81. // printf("-- %d ",rz);
  82. int **r = (int **)malloc(sizeof(int*) *boardSize );
  83. for(row = 0 ; row < boardSize; row++)
  84. {
  85. r[row] = (int *)malloc(sizeof(int) * boardColSize[0]);
  86. memset(r[row],0,sizeof(int) * boardColSize[0]);
  87. }
  88.  
  89. // printf("%d %d ",n,m);
  90.  
  91. for(i=0;i<=n;i++){
  92. for(j=0;j<=m;j++){
  93. // printf("%c ",board[i][j]);
  94.  
  95. if(board[i][j]==word[0]){
  96.  
  97. for(z=0;z<=n;z++){
  98. for(w=0;w<=m;w++){
  99. r[z][w]=0;
  100. // printf("%c ",board[i][j]);
  101. }
  102. }
  103. r[i][j]=1;
  104. pi=i;
  105. pj=j;
  106. f(board,n,m,i,j,word,p,r,&rz);
  107.  
  108.  
  109. }
  110. }
  111. }
  112. // printf(" zz %d ",rz);
  113. if(rz==1)return true;
  114. else return false;
  115. }

到此这篇关于c语言单词搜索的实现的文章就介绍到这了,更多相关c语言单词搜索内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号