資料結構猜字謎遊戲(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.分析時間複雜度簡單,程式