求解字谜问题的一种方法

这是我读weiss的《Datas tructures and Algorithm Analysis in C》是遇到的一个问题

字谜问题具体描述如下:

求解字谜问题的一种方法_第1张图片求解字谜问题的一种方法_第2张图片

求解该问题的代码如下:

#include "stdafx.h"
#include "string.h"
#include "stdlib.h"
 
#define ROW 4  //字谜面板的行数
#define COLS 4  //字谜面板的列数

int IsExsis(char *word, char puzzleBoard[][4]);
 
int main()
{
	char word1[]="this";
    printf("enter a word Please!\n");
	scanf("%s", word1);
	char puzzleBoard[4][4]=
	{
		{'t','h','i','s'},
		{'w','a','t','s'},
		{'o','a','h','g'},
		{'f','g','d','t'}
	};

		if (IsExsis(word1, puzzleBoard))
			printf("%s is exsis in the puzzleBoard\n", word1);
		else
			printf("%s is not exsis in the puzzleBoard\n", word1);

    return 0;
}

int IsExsis(char *word,char puzzleBoard[][4])
{
	int flag;  //使用flag判断连续相同的字母出现的次数
	int I,J;
	int length;
	length = strlen(word);  //length代表要找的字符串长度
	 
    for (int i=0; i=0 && i < ROW, j < COLS; k++, i--, j++)   //判断右上角上是否有单词与word相同
						{
							if (word[k] == puzzleBoard[i][j])
								flag++;
						}
						if (flag == length)  //有则返回1,否则继续判断右下角
							return 1;
						else
						{
							flag = 1;
							i = I;
							j = J;
							i++;
							j++;
							for (int k = 1; k < length, j < COLS, i < ROW; i++, k++, j++)  //判断右下角是否有单词与word相同
							{
								if (word[k] == puzzleBoard[i][j])
									flag++;
							}
							if (flag == length)  //有则返回1,否则结束判断
								return 1;
						}
					}
				}
			}
		}	 
	}
	  return 0;
}

运行结果如下:


分析:

   1.该算法的只判断了puzzleBoard中同一行,同一列,右上,右下,四个方向上是否有单词与给定单词匹配。对于其他几个方向没有进行判断。

   2.如果puzzleBoard太大,那么该算法执行起来的效率就相当低。



你可能感兴趣的:(c语言,数据结构)