/**
* 編寫一個程式求解字謎遊戲問題。
*
* 描述:輸入是由一些字母和單詞構成的二維陣列,目標是找出字謎中的單詞,這些單詞可以是水平、垂直或沿對角線以任何方向放置。找出二維陣列中所有的單詞
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 字典
char puzzle[4][4] = {
{'t','h','i','s'},
{'w','a','t','s'},
{'o','a','h','g'},
{'f','g','g','t'}
};
// 單詞
char *dict[4] = {"this", "tow", "fat", "that"};
int word_exist(int x, int y, int direction, int strlen, char *word);
int main(void)
{
char word[5];
int x, y, direction, strlen;
for (x = 0; x < 4; x++) {
for (y = 0; y < 4; y++) {
for (direction = 0; direction < 8; direction++) {
for (strlen = 2; strlen <= 4; strlen++) {
if (word_exist(x, y, direction, strlen, word) == 1) {
printf("word:%s\n", word);
break;
}
}
}
}
}
return 0;
}
// 查詢單詞
int word_exist(int x, int y, int direction, int strlen, char *word)
{
// 單詞長度從2開始分別向不同方向去找
char sword[5];
int i = 0, j;
while(i < strlen) {
sword[i] = puzzle[x][y];
sword[i + 1] = '\0';
i++;
//遍歷規則
switch (direction){
case 0: //從左往右
y++;
break;
case 1: //從右往左
y--;
break;
case 2: //從上往下
x++;
break;
case 3: //從下往上
x--;
break;
case 4: //從左上往右下
y++;
x++;
break;
case 5: //從右下往左上
y--;
x--;
break;
case 6: //從右上往左下
y--;
x++;
break;
case 7: //從左下往右上
y++;
x--;
break;
default:
puts("Direction error");
return 0;
}
if (x < 0 || y < 0) {
for (j = 0; j < 4; j++) {
if (strcmp(sword, dict[j]) == 0) {
strcpy(word, dict[j]);
return 1;
}
}
return 0;
}
}
// 與詞典比較
for (j = 0; j < 4; j++) {
if (strcmp(sword, dict[j]) == 0) {
strcpy(word, dict[j]);
return 1;
}
}
return 0;
}
資料結構與演算法分析(c 語言描述)習題 1.2
相關文章
- 資料結構與演算法分析(c 語言描述)習題 1.3資料結構演算法
- 資料結構與演算法分析(c 語言描述)習題 1.1資料結構演算法
- 樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- AVL 樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 伸展樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 棧 ADT 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 佇列 ADT 【資料結構與演算法分析 c 語言描述】佇列資料結構演算法
- 資料結構與演算法分析(c 語言描述)最大子序列和問題資料結構演算法
- 資料結構與演算法分析(c 語言描述)基數排序 陣列實現資料結構演算法排序陣列
- 棧的應用之平衡符號 【資料結構與演算法分析 c 語言描述】符號資料結構演算法
- 雜湊表 ADT 分離連結法【資料結構與演算法分析 c 語言描述】資料結構演算法
- 基數排序-單連結串列實現【資料結構與演算法分析(c 語言描述)】排序資料結構演算法
- 資料結構與演算法分析(c 語言描述)多項式 ADT 陣列實現資料結構演算法陣列
- 資料結構與演算法分析(c 語言描述)多項式 ADT 單連結串列實現資料結構演算法
- 《資料結構與演算法分析-C語言描述》第三章 表、棧和佇列 學習筆記資料結構演算法C語言佇列筆記
- 二叉樹 & 二叉查詢樹 ADT [資料結構與演算法分析 c 語言描述]二叉樹資料結構演算法
- 二叉樹 & 二叉查詢樹 ADT【資料結構與演算法分析 c 語言描述】二叉樹資料結構演算法
- 雜湊表 ADT 開放地址法解決衝突【資料結構與演算法分析 c 語言描述】資料結構演算法
- 資料結構演算法與應用c++語言描述 原書第二版 答案(更新中資料結構演算法C++
- 在資料結構與演算法中 傳值方式(C語言)資料結構演算法C語言
- 資料結構--排序--插入排序--python語言描述資料結構排序Python
- 重學C語言_資料結構與基礎語法C語言資料結構
- C語言版資料結構及演算法_快速排序C語言資料結構演算法排序
- C語言結構體大小分析C語言結構體
- 題解1197:發工資咯 (C語言描述)C語言
- 資料結構 順序棧(c語言)資料結構C語言
- 資料結構雜湊表(c語言)資料結構C語言
- 讀後感:資料結構與演算法JavaScript描述資料結構演算法JavaScript
- C語言結構體專題C語言結構體
- 資料結構:初識(資料結構、演算法與演算法分析)資料結構演算法
- 題解1196:去掉空格 (C語言描述)C語言
- 資料結構C語言|佇列相關資料結構C語言佇列
- C語言學習筆記:結構體與指標C語言筆記結構體指標
- 資料結構與演算法學習-複雜度分析資料結構演算法複雜度
- 資料結構與演算法分析——棧資料結構演算法
- 資料結構與演算法分析——連結串列資料結構演算法
- C語言_資料結構圖(留個筆記)C語言資料結構筆記
- 用c語言實現資料結構——單連結串列C語言資料結構