欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言通過棧實現(xiàn)小人走迷宮

 更新時間:2022年03月02日 09:49:10   作者:reg183  
這篇文章主要為大家詳細(xì)介紹了C語言通過棧實現(xiàn)小人走迷宮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言通過棧實現(xiàn)小人走迷宮的具體代碼,供大家參考,具體內(nèi)容如下

新建stack.h

#include "Data.h"
#ifndef _STACK_H
#define _STACK_H
#define INIT_SIZE 10
#define INIT_INCREM 10
typedef struct _STACK{
?? ?ElemType *Base;
?? ?ElemType *Top;
?? ?int size;
} STACK;
STACK* InitStack();
void DestroyStack(STACK* s);
//壓棧
int Push(STACK* s, ElemType *e);
//彈棧
int Pop(STACK* s, ElemType* e);
//站是否為空
int IsEmpty(STACK* ?s);
#endif;

新建stack.c

#include "stack.h"
#include<stdlib.h>

STACK* InitStack(){
?? ?STACK* s = (STACK*)malloc(sizeof(STACK));
?? ?if (s == NULL){
?? ??? ?exit(0);
?? ?}
?? ?s->Base = (ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
?? ?if (s->Base == NULL){
?? ??? ?free(s->Base);
?? ??? ?free(s);
?? ??? ?exit(0);
?? ?}
?? ?s->Top = s->Base;
?? ?s->size = INIT_SIZE;
?? ?return s;
}

void DestroyStack(STACK* s){
?? ?free(s->Base);
?? ?free(s);

}


int Push(STACK* s, ElemType *e){
?? ?if (s == NULL || e==NULL){
?? ??? ?return 0;
?? ?}

?? ?if (s->Top - s->Base >= s->size){
?? ??? ?s->Base = (ElemType*)realloc(s->Base, (s->size + INIT_INCREM)*sizeof(ElemType));
?? ??? ?if (s->Base == NULL){
?? ??? ??? ?return 0;
?? ??? ?}
?? ??? ?s->Top = s->Base + s->size;

?? ??? ?s->size = s->size + INIT_INCREM;
?? ?
?? ?}

?? ?
?? ?*s->Top = *e;
?? ?s->Top++;
?? ?return 1;
}

int Pop(STACK* s, ElemType* e){
?? ?if (s == NULL || e==NULL){
?? ??? ?return 0;
?? ?}

?? ?if (s->Base == s->Top){
?? ??? ?return 0;
?? ?}
?? ?s->Top--;
?? ?*e = *s->Top;
?? ?return 1;
}

int IsEmpty(STACK* ?s){
?? ?return s->Base == s->Top ? 1 : 0;
}

新建Data.h

#ifndef _DATA_H
#define _DATA_H
?? ?typedef struct
?? ?{
?? ??? ?int y;
?? ??? ?int x;
?? ?}POS;

?? ?typedef struct{
?? ??? ?int ord;
?? ??? ?POS seat;
?? ??? ?int di;
?? ?}ElemType;
#endif

新建main.c

#include "Data.h"
#include "stack.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

?int item[10][10]={
?? ?{1,1,1,1,1,1,1,1,1,1},
?? ?{1,0,0,1,0,0,0,1,0,1},
?? ?{1,0,0,1,0,0,0,1,0,1},
?? ?{1,0,0,0,0,1,1,0,0,1},
?? ?{1,0,1,1,1,0,0,0,0,1},
?? ?{1,0,0,0,1,0,0,0,0,1},
?? ?{1,0,1,0,0,0,1,0,0,1},
?? ?{1,0,1,1,1,0,1,1,0,1},
?? ?{1,1,0,0,0,0,0,0,0,1},
?? ?{1,1,1,1,1,1,1,1,1,1}
};

static const POS inPos={1,1},outPos={8,8};
int IsPass(POS CurP){
?? ?return item[CurP.y][CurP.x]==0?1:0;
}

POS NextPos(POS CurP,int di){
?? ?POS p=CurP;
?? ?switch(di){
?? ??? ?case 0:
?? ??? ??? ?p.x--;//向左
?? ??? ??? ?break;
?? ??? ?case 1:
?? ??? ??? ?p.y++;//向下
?? ??? ??? ?break;
?? ??? ?case 2:
?? ??? ??? ?p.x++;//向右
?? ??? ??? ?break;
?? ??? ?case 3:
?? ??? ??? ?p.y--;//向上
?? ??? ??? ?break;
?? ?}
?? ?return p;
}

void PrintItem(POS CurP){
?? ?int i,j;
?? ?system("cls");

?? ?for(i=0;i<10;i++){
?? ??? ?for(j=0;j<10;j++){
?? ??? ??? ?if(i==CurP.y && j==CurP.x){
?? ??? ??? ??? ?printf("@");
?? ??? ??? ??? ?continue;
?? ??? ??? ?}

?? ??? ??? ?if(item[i][j]==1){
?? ??? ??? ??? ?printf("*");

?? ??? ??? ?}else{
?? ??? ??? ??? ?printf(" ");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
}

void main(){

?? ?STACK* s=InitStack();
?? ?ElemType e;
?? ?int setp=1;
?? ?POS CurPos=inPos;
?? ?PrintItem(inPos);

?? ?do{
?? ??? ?if(IsPass(CurPos)){
?? ??? ??? ?e.ord=setp;
?? ??? ??? ?e.di=0;
?? ??? ??? ?e.seat=CurPos;
?? ??? ??? ?Push(s,&e);//只有能通過才壓棧

?? ??? ??? ?item[CurPos.y][CurPos.x]=2;
?? ??? ??? ?if(CurPos.y==outPos.y && CurPos.x==outPos.x){
?? ??? ??? ??? ?
?? ??? ??? ??? ?PrintItem(CurPos);
?? ??? ??? ??? ?printf("ok!\n");
?? ??? ??? ??? ?break;
?? ??? ??? ?}

?? ??? ??? ?PrintItem(CurPos);

?? ??? ??? ?CurPos=NextPos(e.seat,0);
?? ??? ??? ?setp++;
?? ??? ??? ?getch();
?? ??? ?}else{

?? ??? ??? ?Pop(s,&e);//如果不能通過就彈棧

?? ??? ??? ?if(e.di==4 && !IsEmpty(s)){
?? ??? ??? ??? ??? ?item[CurPos.y][CurPos.x]=8;
?? ??? ??? ??? ??? ?Pop(s,&e);
?? ??? ??? ?}

?? ??? ??? ?if(e.di<3){
?? ??? ??? ??? ?e.di++;
?? ??? ??? ??? ?Push(s,&e);
?? ??? ??? ??? ?CurPos=NextPos(e.seat,e.di);
?? ??? ??? ?}
?? ??? ?}
?? ?}while(!IsEmpty(s));

}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++數(shù)組模擬之單鏈表與雙鏈表和棧和隊列的實現(xiàn)過程

    C++數(shù)組模擬之單鏈表與雙鏈表和棧和隊列的實現(xiàn)過程

    這篇文章主要介紹了C++數(shù)組模擬之單鏈表與雙鏈表和棧和隊列的實現(xiàn)過程,了解內(nèi)部原理是為了幫助我們做擴(kuò)展,同時也是驗證了一個人的學(xué)習(xí)能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會的,跟隨下文來具體了解吧
    2023-02-02
  • Qt跨平臺窗口選擇功能的實現(xiàn)過程

    Qt跨平臺窗口選擇功能的實現(xiàn)過程

    很多時候為了方便軟件的使用,我們需要讓編寫的界面程序顯示在最上層,這時候就需要對窗口屬性進(jìn)行調(diào)整,下面這篇文章主要給大家介紹了關(guān)于Qt跨平臺窗口選擇功能的實現(xiàn)過程,需要的朋友可以參考下
    2022-12-12
  • OpenCV圖像文件批量讀取編程實例

    OpenCV圖像文件批量讀取編程實例

    這篇文章主要為大家詳細(xì)介紹了OpenCV圖像文件批量讀取編程實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++?數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解順序表

    C++?數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解順序表

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示
    2022-03-03
  • C語言實現(xiàn)彈跳小球

    C語言實現(xiàn)彈跳小球

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)彈跳小球,設(shè)置了小球分?jǐn)?shù)及過關(guān)難度,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言 sprintf 函數(shù)詳情

    C語言 sprintf 函數(shù)詳情

    這篇文章主要介紹了C語言 sprintf 函數(shù),文章主要包括sprintf 函數(shù)簡介、sprintf 函數(shù)使用和簡單說明了一下sprintf、fprintf、printf 函數(shù)區(qū)別,需要的朋友可以參考一下文章的具體內(nèi)容
    2021-10-10
  • c++實現(xiàn)堆排序的示例代碼

    c++實現(xiàn)堆排序的示例代碼

    本文主要介紹了c++實現(xiàn)堆排序的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C++深入探索類和對象之封裝及class與struct的區(qū)別

    C++深入探索類和對象之封裝及class與struct的區(qū)別

    C++?類與對象涉及的知識點非常廣泛,所以我準(zhǔn)備寫成幾個特定的部分來作為博文分享,這次的blog將詳細(xì)講解類的屬性、行為、訪問權(quán)限,class與struct的區(qū)別以及具體案例,希望能夠?qū)δ銈冇袔椭?,解決入門小白或者對這方面了解不多的朋友們,那么接下來開始今天的內(nèi)容
    2022-05-05
  • 詳解C++編程中的條件判斷語句if-else與switch的用法

    詳解C++編程中的條件判斷語句if-else與switch的用法

    這篇文章主要介紹了C++編程中的條件判斷語句if-else與switch的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01
  • 深入理解c++常成員函數(shù)和常對象

    深入理解c++常成員函數(shù)和常對象

    下面小編就為大家?guī)硪黄钊肜斫鈉++常成員函數(shù)和常對象。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧
    2016-05-05

最新評論