最近在看数据结构与算法分析(java语言描述)这本书,书的第一章有这样一个算法题:
输入是由一些字母构成的一个二维数组以及一组单词组成。目标是要找出字谜中的单词,这些单词可能是水平,垂直或沿对角线上任何方向设置的。经过思考,我写出的一个查找算法如下:
//输出字谜中的单词
public static void outPutlogoGriph(String temp,String[] logogriph){
for(int k=0;k<logogriph.length;k++){
if(temp.indexOf(logogriph[k])>=0){
System.out.println(logogriph[k]);
}
}
}
//比较字谜中的单词
public static void getLogoGriph(String[][] s,String[] logogriph){
String temp = "";
// 查找水平方向上的单词,从左往右的方向
for(int i=0;i<s.length;i++){
//正序的
temp = "";
for(int j=0;j<s[i].length;j++){
temp += s[i][j];
}
//比较,并输出字谜中的单词
outPutlogoGriph(temp,logogriph);
//逆序的
temp = "";
for(int j=s[i].length-1;j>=0;j--){
temp += s[i][j];
}
//比较,并输出字谜中的单词
outPutlogoGriph(temp,logogriph);
}
// 查找垂直方向上的单词,从上往下的方向
// 查找垂直方向上的单词,从下往上的方向
temp = "";
for(int i=0;i<s[0].length;i++){
//上下方向的
temp = "";
for(int j=0;j<s.length;j++){
temp += s[j][i];
}
//比较,并输出字谜中的单词
outPutlogoGriph(temp,logogriph);
//下上方向的
temp = "";
for(int j=s.length-1;j>=0;j--){
temp += s[j][i];
}
//比较,并输出字谜中的单词
outPutlogoGriph(temp,logogriph);
}
//查找第一条对角线(从上往下的对角线)上的单词,正方向(针对的是规则的二维数组)
temp = "";
for(int i=0;i<s.length;i++){
temp += s[i][i];
}
//正向的
//比较,并输出字谜中的单词
outPutlogoGriph(temp,logogriph);
// 查找对角线上的单词,反方向
temp = "";
for(int i= s.length-1;i>=0;i--){
temp += s[i][i];
}
//比较,并输出字谜中的单词
outPutlogoGriph(temp,logogriph);
//查找第二条对角线,从下往上的对角线
temp = "";
for(int i=0;i<s.length;i++){
temp += s[s.length-i-1][i];
}
//正向的(斜向上)
//比较,并输出字谜中的单词
outPutlogoGriph(temp,logogriph);
temp = "";
for(int i=0;i<s.length;i++){
temp += s[i][s.length-i-1];
}
//正向的(斜向下)
//比较,并输出字谜中的单词
outPutlogoGriph(temp,logogriph);
}
public static void main(String[] args){
//注意该方法只适用于规则的数组,即不允许String[][]s = new String[4][]这种不规则的数组;
String[][] s = new String[4][4];
s[0][0] = "t";
s[0][1] = "t";
s[0][2] = "i";
s[0][3] = "f";
s[1][0] = "t";
s[1][1] = "h";
s[1][2] = "a";
s[1][3] = "o";
s[2][0] = "w";
s[2][1] = "t";
s[2][2] = "a";
s[2][3] = "w";
s[3][0] = "o";
s[3][1] = "s";
s[3][2] = "a";
s[3][3] = "t";
String[] logogriph = new String[]{"this","two","fat","that"};
getLogoGriph(s,logogriph);
}
以后会渐进的补充!
分享到:
相关推荐
一种可能的方法是读取这n个数字到一个数组中,然后使用简单的排序算法(如冒泡排序)对数组进行降序排序,最后返回数组中的第k个元素作为答案。另一种稍好的算法可能是首先将前k个元素读入一个数组,并对其进行降序...
台湾师范大学的ACM算法入门教程是一份非常宝贵的教育资源,它为初学者提供了全面而深入的算法学习路径。ACM(International Collegiate Programming Contest)是全球知名的大学生编程竞赛,旨在提升学生的算法设计、...
例如,在字谜问题中,如果一个字母已经出现在同一行、列或宫中,那么在其他位置再放置这个字母就是无效的。 6. **实现细节**:在编程实现时,常用的数据结构有栈或队列来保存状态,递归函数或迭代过程来模拟深度...
本书首先通过一个具体问题——**选择问题**来引入算法分析的重要性。该问题定义为:给定一组包含 _n_ 个数字的集合,找出其中第 _k_ 大的元素。这个问题虽然看似简单,但其实隐藏了许多算法设计上的挑战。 #### ...
* 情境导入:从教室询问学生喜不喜欢玩游戏,喜欢玩什么样的游戏开场师:今天我们来玩一个游戏,到底是玩什么样的游戏呢,大家请看 "猜谜语" 程序文件。 * 教学过程〔一〕:教师呈现问题1,请同学站起来答复〔解决...
它基于图论中的最短路径问题,通过改变一个单词中的一个字母,逐步转换成另一个单词,每次变换只能改变一个字母,目标是在最少的步骤内完成转换。 2. **Sort.java**:排序算法是数据处理中必不可少的部分。Java中...
在实现这个算法时,我们首先需要一个函数来插入单词到二叉树。这个函数会接收一个单词和一个二叉树节点,然后将单词的每个字符插入到正确的位置。在C#中,这可以通过迭代单词并使用递归来完成。 然后,我们需要一个...
过程与方法上,学生需围绕实际问题,如获取谜语线索,掌握枚举算法的解题步骤,学会从不同角度分析问题。情感态度与价值观方面,教学旨在激发学生的学习兴趣,增强团队合作和创新意识,同时引导他们关注算法在现实...
- **单词阶梯(Word Ladder)**:`WordLadder.cpp`可能涉及到字谜游戏的解决方案,如“单词阶梯”问题,其中目标是通过改变一个单词的单个字母来逐步转换成另一个单词,且每次转换后的单词只能相差一个字母。...
- **图算法**:如WordLadder.java可能涉及字谜游戏中的最短路径问题,可能使用了Dijkstra算法或A*算法。 - **动态规划**:解决最优化问题,如背包问题、最长公共子序列等。 - **贪心算法**:局部最优解来寻找全局...
在本项目中,“matlab开发-matlab竞赛纵横字谜”是一个使用MATLAB进行编程竞赛相关的开发案例。这个压缩包包含了一系列与实现纵横字谜解题算法和比赛评分系统相关的文件。下面将对这些文件的功能和可能涉及的MATLAB...
算法-数据结构这是一个存储库,用于存储我研究算法和数据结构的所有工作。 在下面,您将找到我为LeetCode或在线课程...LeetCode Valid Anagram.py这个问题要求给定两个字符串s和t,编写一个函数来确定t是否是s的字谜
字谜 元音 数组分块 反向阵列 反向词 大写 凯撒密码 赎金注5 均值,中位数,众数 两次总和 最大利润 Eratosthenes筛 斐波那契 记忆斐波那契 楼梯 金字塔 矩阵精神 数据结构算法 Queue列 堆栈 链表 挑战: 中点 圆...
对于大型数据集,计算与元素n的平方成正比(O(n ^ 2))的简单实现变得完全不切实际。 按语言组织 按类别组织 类型 描述 细节 执行 堆 有效括号 链表 MergeTwoSortedLists 链表 合并k排序列表 2个指针 困雨水 动态...
使用Python的数据结构和算法这是使用Python中实现的数据结构解决的各种常见编程问题的集合...is an anagram of "cannot aim"我们的带有两个字符串的字谜检查算法,并将根据是否找到字谜给出一个布尔值TRUE / FALSE?阵
在每个节点中填充下一个右指针 II 帕斯卡三角形 II 单号二 二叉树先序遍历 二叉树后序遍历 LRU缓存 计算具有唯一数字的数字 等分子集总和 斐波那契数 从二叉树构造字符串 二叉树的最大宽度 实现魔术词典 托普利兹...
本文将深入探讨“Algorithm-pynpuzzle.zip”压缩包中的内容,这是一个用Python实现的求解和测试N字谜问题的算法。我们将详细解析这个算法的工作原理,以及如何利用Python进行有效的实现。 N字谜问题,又称为N×N...
在这个特定的情况下,我们有一个名为"Anagram"的Java程序,它的功能是生成字谜供用户解决。字谜是一种智力游戏,通常由打乱顺序的字母组成,玩家需要通过重组这些字母来找出隐藏的单词或短语。 在Java编程中,实现...
这个存储库提供了几个编程问题的代码片段。 这些问题是从各种来源阅读的。 只要有可能,就会有链接和问题一起呈现。 编程语言 我主要使用 Javascript、Typescript、Java 和 Scala。 您可以期待使用其中一种编程语言...