C 基於控制台的迷宮實現(中)

2021-08-05 22:10:05 字數 1722 閱讀 1838

路徑是由許多點組成的。因此表示路徑的struct中包含了起始點的指標和終止點的指標,以及該路徑中包含點的最大值。

typedef struct mstack;

對路徑的初始化實際上就是為路徑中的所有點分配空間。

void initstack(mstack *s) 

s->top = s->base;

s->stacksize = stack_init_size;

}

其中,malloc()函式的作用是在記憶體中分配空間,分配的空間大小為

stack_init_size*sizeof(mstackelem)

位元組;stack_init_size

表示路徑中包含的點的個數,其定義為

#define

stack_init_size 100

如果當前點是「通路」,則需要將當前點新增到路徑中。push()

函式完成向路徑中新增點的功能,該函式的第乙個引數表示路徑,第二個引數表示要新增的點。

void push(mstack *s, mstackelem e) 

s->top = s->base + s->stacksize;

s->stacksize += stackincrement;

}*(s->top++) = e;

}

當向路徑中新增點時,首先判斷該路徑中的點是不是已經滿了;如果滿了,則需要為路徑「擴容」,即通過

realloc()

函式實現,路徑擴容之後,相應的終止點的位置和點的數量會發生變化;

stackincrement

表示路徑每次擴容的大小,其值定義為

#define

stackincrement 10

當將點新增到路徑後,終止點的位置和值都要發生變化。

如果當前點是「斷路」,則需要從路徑中刪除點,即將路徑中終止點向起始點的方向移動一位。pop()

函式完成從指定的路徑上刪除點的功能,該函式的引數為路徑。

void pop(mstack *s) 

else

}

在路徑中刪除點時,首先判斷路徑是否已經是空的,如果不為空,則移動路徑中的終止點。

如果當前點是「斷路」,則需要返回該點的「上乙個點」,對「上乙個點」進行判斷。獲取「上乙個點」的函式是gettop()

,該函式的引數是指定的路徑。

mstackelem gettop(mstack *s) 

else

}

判斷當前點是否已經走過,如果沒有走過,則需要判斷該點是否是「通路」、「斷路」和「終點」;如果該點已經走過,則說明該點是「通路」,某些方向的「下乙個點」已經走過且是「斷路」,此時要取另外方向的「下乙個點」進行判斷。

判斷當前點是否已經走過的函式是unpass(),該函式第乙個引數是指定路徑,第二個引數是要判斷的點。

int unpass(mstack path, mstackelem cur) 

(path.top)--;

}return flag;

}

使用while

迴圈遍歷路徑中的所有點,如果在路徑中發現指定的點,則說明該點已經走過,函式的返回值是

0,否則為沒有走過該點,返回值是1。

C 控制台 《迷宮》

最近閒來無事,回顧一下以前學過的c 控制台小程式,特發此篇 主體思路 利用二維陣列來實現。效果圖 首先 vs2010,建立控制台程式,然後,新增類labyrinth,該類的 如下,1 using system 23 namespace迷宮4 9 10 11 12 13 14 15 16 17 18 ...

基於控制台的I O

c 輸入cout與輸出cin 輸入和輸出並不是c 語言中的正式組成成分 c和c 本身都沒有為輸入和輸出提供專門的語句結構 輸入輸出不是由c 本身定義的,而是在編譯系統提供的i o庫中定義的 在編寫c 程式時,如果需要使用輸入輸出時,則需要包含標頭檔案 在 中定義了用於輸入輸出的物件。例如 常見的 c...

基於c 實現的推箱子遊戲(控制台程式)

基於c 實現的小遊戲推箱子,執行環境windows,vs下編譯,這個小遊戲很簡單實現,首先先自己想一下讓自己來玩這個遊戲需要什麼,1 遊戲介面 及地圖 由地圖聯想到我們可以設定遊戲的關數 本程式中我只寫了一關,可以實現靈活新增 2 介面需要什麼 遊戲所需要的元素 及箱子 box 人 people 目...