数据结构与算法 字谜游戏问题

八个方向搜索

// wordpuzzle.js
window.onload = entry;

var keyword = ‘fuck‘;

var words = new Array(4);

words[0]  = new Array(‘t‘, ‘h‘, ‘i‘, ‘k‘);

words[1]  = new Array(‘w‘, ‘a‘, ‘c‘, ‘s‘);

words[2]  = new Array(‘o‘, ‘u‘, ‘h‘, ‘j‘);

words[3]  = new Array(‘f‘, ‘g‘, ‘d‘, ‘t‘);

function entry() {

wordpuzzle(words, keyword);

}

function wordpuzzle(words, keyword) {

// 穷举法,八个方向查找
    // 左右,右左,上下,下上,左斜下,反左斜下,右斜下,反右斜下

var k       = 0;

var search  = new Array(keyword.length);

for (var i = 0; i < search.length; i++) {

search[i] = keyword.substring(i, i + 1);

}

// left---->right
    for (var i = 0; i < words.length; i++){

for (var j = 0; j < words[i].length; j++) {

if (words[i][j] == search[k]) {

k++;

}

else {

k = 0;

break;

}

if (k == search.length) {

var result = 1;

}

}

k = 0;

}

// right----->left
    for (var i = 0; i < words.length; i++){

for (var j = words[i].length - 1; j >= 0; j--) {

if (words[i][j] == search[k]) {

k++;

}

else {

k = 0;

break;

}

if (k == search.length) {

var result = 1;

}

}

k = 0;

}

// top----->bottom
    for (var j = 0; j < 4; j++){

for (var i = 0; i < words.length; i++) {

if (words[i][j] == search[k]) {

k++;

}

else {

k = 0;

break;

}

if (k == search.length) {

var result = 1;

}

}

k = 0;

}

// bottom----->top
    for (var j = 0; j < 4; j++){

for (var i = words.length - 1; i >= 0; i--) {

if (words[i][j] == search[k]) {

k++;

}

else {

k = 0;

break;

}

if (k == search.length) {

var result = 1;

}

}

k = 0;

}

// 左上----->右下
    var i = j = 0;

while (i < words.length && j < words[i].length) {

if (words[i][j] == search[k]) {
    
            k++;
    
        }
    
        else {
    
            k = 0;
    
            break;
    
        }
    
        if (k == search.length) {
    
            var result = 1;
    
        }

i++;

j++;

}

k = 0;

// 右下----->左上
    var i = words.length - 1;

var j = words[i].length - 1;

while (i >= 0 && j >= 0) {

if (words[i][j] == search[k]) {
    
            k++;
    
        }
    
        else {
    
            k = 0;
    
            break;
    
        }
    
        if (k == search.length) {
    
            var result = 1;
    
        }

i--;

j--;

}

k = 0;

// 左下----->右上
    var i = words.length - 1;

var j = 0;

while (i >= 0 && j < words[i].length) {

if (words[i][j] == search[k]) {
    
            k++;
    
        }
    
        else {
    
            k = 0;
    
            break;
    
        }
    
        if (k == search.length) {
    
            var result = 1;
    
        }

i--;

j++;

}

k = 0;

// 右上----->左下
    var i = 0;

var j = words[i].length - 1;

while (i < words.length && j >= 0) {

if (words[i][j] == search[k]) {
    
            k++;
    
        }
    
        else {
    
            k = 0;
    
            break;
    
        }
    
        if (k == search.length) {
    
            var result = 1;
    
        }

i++;

j--;

}

k = 0;

if (result == 1) {

window.alert(‘The word exists!‘);

}

else {

window.alert(‘The word does not exist!‘);

}

}

时间: 2024-10-25 09:53:48

数据结构与算法 字谜游戏问题的相关文章

《数据结构算法分析C描述》引论:选择问题,字谜游戏问题

#include <stdio.h> #include <stdlib.h> // 第一题 // 找出N个数的第k个最大者 // 方法1:排序(冒泡),降序找出第k个值 // 方法2:选前k个点进行降序排序,后面的数进行比较, // 如果数比第k个数小则忽略, 复杂度低于方法1 #define TYPE int #define TESTBUBLESORT 1 #define TESTBLOCKCOMPARE 1 #define TESTWORDPUZZLE 1 int findk_

游戏制作中的大宝剑---常用的数据结构与算法

前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为了方便大家阅读,个人认为比较重要的内容-------红色字体显示 个人认为可以了解的内容-------紫色字体显示 --------------------------------------------------------------------------- ---------------------------------

JAVA编程思想导论(猜字谜游戏1.0)

一. 引言 本章将借用一个简易的猜字谜游戏,向读者简单介绍JAVA面向对象的部分知识以及实现思路. 二. 面向对象思想导论 为了了解什么是面向对象,我们需要解决以下几点问题(如图2.1所示): 面向对象是什么? 面向对象的特征(或者说表现形式). 为什么要面向对象(它与面向过程的区别). 面向对象该怎么做? 众所周知,计算机的编程语言是始于对机器的模仿,即以代码的形式控制机器完成人们希望所能达到的任务或者效果,故而所有编程语言都提供了抽象机制. 而这种抽象机制实际上可以这么认为——人们所能够解决

JAVA封装思想导论(猜字谜游戏2.0)

一. 引言 本章将第一篇中的猜字谜游戏1.0进行升级,然后向读者简单介绍JAVA中封装思想的部分知识以及其实现思路. 二.封装思想导论 在面向对象的编程思想中提出了三大基本特征:封装.继承和多态.其中,封装是继承与多态的基础.如果不能很好的理解封装的含义,那么继承和多态的学习也无从谈起.所以,为了更好的理解封装思想,我们将解决以下几个问题(如图2.1): 封装是什么? 我们为什么需要封装? 封装的特点? 封装如何实现? 封装的思想,从起源来看,已经很久了.早在亚里士多德时期,他就有关于类型的著述

Java数据结构和算法(一)——开篇

这篇文章里面不讲技术,抽空讲讲技术和通俗之间有一种奇特的关系,还有驱动力学习的东西. 1)技术与通俗 大学里面那本严蔚敏的数据结构不厚,内容丰富,但是复杂问题的讲解方面篇幅这样就少了,比较难理解,c也不是很擅长,但是基本的思路还是有的. 简单的链表,数组,堆栈,队列,图,几个排序算法. 后面看到知乎涛吴的回答,当时很震撼,这里引用一下他的回答: 如果说 Java 是自动档轿车,C 就是手动档吉普.数据结构呢?是变速箱的工作原理.你完全可以不知道变速箱怎样工作,就把自动档的车子从 A 开到 B,而

java数据结构与算法之递归思维(让我们更通俗地理解递归)

[版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53452971 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设计与实现 j

php面试题之二——数据结构和算法(高级部分)

二.数据结构和算法 1.使对象可以像数组一样进行foreach循环,要求属性必须是私有.(Iterator模式的PHP5实现,写一类实现Iterator接口)(腾讯) <?php class Test implements Iterator{ private $item = array('id'=>1,'name'=>'php'); public function rewind(){ reset($this->item); } public function current(){

《Java数据结构和算法》- 数组

Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new操作符: int [] objArray = null; // defines a reference to an array objArray = new int[100]; // creates the array, and sets objArray to refer to it 或使用等价的

如何高效、系统地学习数据结构与算法?

数据结构与算法的应用在计算机编程领域非常广泛,甚至可以说无处不在,比如图像视频处理.数据压缩.数据库.游戏开发.操作系统.编译器.搜索引擎.AR.VR.人工智能.区块链等等领域,都是以数据结构与算法为基石.很多程序员在初次接触到算法之后因为其知识点多.复杂.思考太过艰深选择放弃,但是数据结构与算法对于程序员的重要性不言而喻,不管是提升代码质量还是面试,可以说都是必备技能.那么,如何才能快速.清晰地学好数据结构与算法呢?iOS两大流行开源框架作者,小码哥教育创始人李明杰老师特意联合汇丰银行技术总监