1. 程式人生 > >資料結構猜字謎遊戲(Java語言編寫)

資料結構猜字謎遊戲(Java語言編寫)

    前幾年買的一本資料結構與演算法分析的書籍, 偶然看到以前有很多題目沒有做, 現在抽空來看一下
  • 題目:輸入是由一些字母構成的一個二維陣列以及一組單片語成。目標是要找出字謎中的單詞, 這些單詞可能是水平、垂直或者沿對角線任何方向放置的。
  • 思路:首先用廣度或者深度都不是一個太理想的方式。因為條件限制, 所以在這裡首先將橫縱斜以及字串反向的字元儲存, 然後在一一匹配。在時間複雜度上粗略統計也只是平方。
/**
 * 解字謎遊戲
 */
public class question_1_2 {

    static final char[][] c = new char[][]{
            {'t'
, 'h', 'i', 's'}, {'w', 'a', 't', 's'}, {'o', 'a', 'h', 'g'}, {'f', 'g', 'd', 't'} }; static String[] s = {"this", "two", "fat", "that", "sfgs"}; static int min = c.length; //最小長度 static List<String> list = new ArrayList<>(); public
static void a(int minLength){ for(int i = 0; i < c.length; i++){ //橫向和縱向 char[] v1 = new char[c[i].length]; char[] v2 = new char[c[i].length]; for(int j = 0; j < c[i].length; j++){ v1[j] = c[i][j]; //橫向 v2[j] = c[j][i]; //縱向
} list.add(String.valueOf(v1)); list.add(String.valueOf(v2)); //斜對角 if(i >= minLength - 1){ char[] v3 = new char[i + 1]; //左上 char[] v4 = new char[i + 1]; //左下 char[] v5 = new char[i + 1]; //右上 char[] v6 = new char[i + 1]; //右下 int k = 0, l = i, t = c.length - 1; while(l >= 0){ v3[k] = c[k][l]; v4[k] = c[t][l]; v5[k] = c[l][t]; v6[k] = c[c.length - l - 1][t]; k++; l--; t--; } b(v3); b(v4); b(v5); b(v6); } } } //字元反轉 public static void b(char[] c){ char[] c2 = new char[c.length]; int j = 0; for(int i = c.length - 1; i >= 0; i--, j++){ c2[j] = c[i]; } list.add(String.valueOf(c2)); list.add(String.valueOf(c)); } public static void main(String[] args){ //找出最小長度 for (String string : s) { if(string.length() < min) min = string.length(); } //列舉字謎陣列 a(min); //檢索是否存在在字謎中 Set<String> list2 = new TreeSet<>(); for (String str : list) { for(int i = 0; i < s.length; i++){ if(str.indexOf(s[i]) != -1) list2.add(s[i]); } } for (String s : list2) { System.out.print(s + ","); } } }

相關推薦

資料結構字謎遊戲Java語言編寫

    前幾年買的一本資料結構與演算法分析的書籍, 偶然看到以前有很多題目沒有做, 現在抽空來看一下。 題目:輸入是由一些字母構成的一個二維陣列以及一組單片語成。目標是要找出字謎中的單詞, 這些單詞可能是水平、垂直或者沿對角線任何方向放置的。 思路:首先用廣

資料結構與演算法分析Java語言描述12—— 堆排序與陣列建堆

基本的堆排序 HeapSortBasic.java package com.algorithm.sort; import com.dataStructure.heap.MaxHeap; public class HeapSortBasic { p

資料結構與演算法分析Java語言描述32—— 使用 Kruskal 演算法求有權圖的最小生成樹

將圖中的所有邊存到最小堆中 當最小堆非空 取出權重最小的邊 如果此邊的兩個端點是連線的 跳出本次迴圈 將此邊加入 mst 中 在並查集中 union 此邊的兩端點 package com.dataStr

資料結構——順序表操作C語言實現

//順序表list #include"stdio.h" #define maxsize 15 typedef struct{ int a[maxsize]; int size; }list; //建立 void create(lis

21天刷題計劃之5.2—牛牛的遊戲Java語言描述

題目描述: 牛牛很喜歡玩接龍遊戲,一天他突發奇想,發明了一種叫做“字串鏈”的遊戲。 這個遊戲的規則是這樣的,給出3個字串A,B,C,如果它們滿足以下兩個條件,那麼就可以構成一個“字串鏈”: 1.A的最後一個字母和B的第一個字母相同; 2.B的最後一個字母和C的

資料結構—二叉樹C語言實現

以下所有內容來自網易雲課堂——資料結構(小甲魚版) 對於樹來說,一旦可以指明他的分支數,那麼就可以用連結串列來實現了 二叉樹是應用廣泛的樹,因為現實世界大部分模型都只包含0,1這兩種情況,非常適合用二叉樹 如下: typedef struct BiNode {

資料結構學習筆記-串C語言實現

串由零個或多個字元組成,說白了就是字串。串的儲存方式相對於線性表來講有些不同,他分為以下幾種:順序儲存、堆分配儲存、鏈式儲存。順序儲存通常在陣列中的頭元素存放字串長度。堆分配儲存通常會動態分配空間。鏈式儲存分為兩種,一種是每個節點存放一個字元(比較浪費空間),另一種則是每個節

資料結構:迴圈佇列C語言實現

生活中有很多佇列的影子,比如打飯排隊,買火車票排隊問題等,可以說與時間相關的問題,一般都會涉及到佇列問題;從生活中,可以抽象出佇列的概念,佇列就是一個能夠實現“先進先出”的儲存結構。佇列分為鏈式佇列和靜態佇列;靜態佇列一般用陣列來實現,但此時的佇列必須是迴圈佇列,否則

迷宮遊戲程式碼java語言編寫

迷宮遊戲 題目描述: 用0和1組成一個矩形矩陣,0代表當前位置可走,1代表當前位置不可走。 eg: 0 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0 實現功能: 1.建立迷宮 2.選擇迷宮入口和出口 3.

資料結構 簡單選擇排序C語言實現

       選擇排序的基本思想:每一趟在n-i+1(i=1,2,3,…,n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。 演算法思想       第一趟簡單選擇排序時,從第一個記錄開始,通過n-1 次關鍵字比較,從n 個記錄中選出關鍵字最小的記錄,並和第

資料結構與演算法——線性表之順序表JAVA語言實現

資料結構與演算法——線性表之順序表(JAVA語言實現 ) 線性表是由n個數據元素組成的優先序列。 線性表中每個元素都必須有相同的結構,線性表是線性結構中最常用而又最簡單的一種資料結構。線性表由儲存結構是否連續可分為順序表和連結串列。順序表指線性表中每個元素按順序依次儲存,線性表中邏

資料結構java語言描述

資料結構(java語言描述)   概念性描述與《資料結構例項教程》大同小異,具體參考:http://www.cnblogs.com/bookwed/p/6763300.html。 概述 基本概念及術語 資料 資訊的載體,是對客觀事物的符號表示,凡能輸入到計算機中並被計算機程式處理的符號都

【數據結構】之順序表Java語言描述

arraylist 表數據 nbsp real 不同 1.5 根據 長度 tar   之前總結過使用C語言描述的順序表數據結構。在C語言類庫中沒有為我們提供順序表的數據結構,因此我們需要自己手寫,詳細的有關順序表的數據結構描述和C語言代碼請見【我的這篇文章】。   在Jav

python 字謎遊戲隨機數

pri ext pytho port 隨機 digi orm margin randint python 猜字謎遊戲(隨機數)import randomtimes = 3secret = random.randint(1,10)guess = 0print('-

資料結構——稀疏矩陣運算器C語言

資料結構——稀疏矩陣運算器(C語言) /*****************稀疏矩陣運算器 ****************/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define TRUE

資料結構---二分搜尋樹java實現

樹 樹的分類 1、 二分搜尋樹 2、 平衡二叉樹: AVL;紅黑樹 3、 堆; 並查集 4、線段樹;Trie(字典樹、字首樹) 二叉樹 二叉樹具有天然的遞迴結構 每個節點的左子樹也是二叉樹 每個節點的右子樹也是二叉樹 二叉樹不一定是“滿”的 一

資料結構2--線性表java程式碼實現線性表的鏈式儲存

1.鏈式儲存       2.分析       每個節點為一個物件,該物件包含資料域和指標域        整條單鏈表為一個物件,他和節點物件進行組合。  3.

資料結構1--線性表java程式碼實現線性表的順序儲存

1.資料結構的概念      資料:資訊載體,計算機處理的物件的總稱      資料元素:也稱結點,組成資料的基本單位      資料項:資料項是資料的最小單位     &n

資料結構---迷宮問題題解C語言

資料結構—迷宮問題題解(C語言) #include<stdio.h> #include<stdlib.h> #define FALSE 0 #define TRUE 1 #define OK 1 #define M 20

資料結構之氣泡排序java

氣泡排序可以說是最簡單的排序演算法,但不意味著它不重要。 理解氣泡排序,可以帶出以下問題。 1.氣泡排序只有一個基本操作,就是比較和交換相鄰的兩個元素,可以提現將一個複雜問題轉化為簡單問題的疊加的思想。 2.氣泡排序的兩層for迴圈該如何理解。 3.分析時間複雜度簡單,程式