最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

本文實例為大家分享了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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++插入排序算法實例

    C++插入排序算法實例

    這篇文章主要介紹了C++插入排序算法實例,本文先是講解了什么插入排序,然后給出了C++代碼實例,需要的朋友可以參考下
    2014-10-10
  • OpenCV3實現(xiàn)車牌識別(C++版)

    OpenCV3實現(xiàn)車牌識別(C++版)

    這篇文章主要為大家詳細介紹了OpenCV3實現(xiàn)車牌識別功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++版本簡易Flappy bird

    C++版本簡易Flappy bird

    這篇文章主要介紹了C++版本簡易Flappy bird的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • Opencv獲取身份證號碼區(qū)域的示例代碼

    Opencv獲取身份證號碼區(qū)域的示例代碼

    這篇文章主要介紹了Opencv獲取身份證號碼區(qū)域的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • C語言商品銷售系統(tǒng)源碼分享

    C語言商品銷售系統(tǒng)源碼分享

    這篇文章主要為大家分享了C語言商品銷售系統(tǒng)源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 基于Qt+opencv開發(fā)的視頻播放器示例詳解

    基于Qt+opencv開發(fā)的視頻播放器示例詳解

    這篇文章主要為大家介紹了基于Qt+opencv開發(fā)的視頻播放器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 老生常談C/C++內(nèi)存管理

    老生常談C/C++內(nèi)存管理

    下面小編就為大家?guī)硪黄仙U凜/C++內(nèi)存管理。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • C語言實現(xiàn)三子棋游戲(初級版)

    C語言實現(xiàn)三子棋游戲(初級版)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)三子棋游戲初級版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C++ 中的Lambda表達式寫法

    C++ 中的Lambda表達式寫法

    在 C++ 11 中,lambda 表達式(通常稱為 “l(fā)ambda”)是一種在被調(diào)用的位置或作為參數(shù)傳遞給函數(shù)的位置定義匿名函數(shù)對象的簡便方法,下面通過本文給大家介紹C++ 中的Lambda表達式寫法,需要的朋友參考下吧
    2017-02-02
  • C語言實現(xiàn)簡單的停車場管理系統(tǒng)

    C語言實現(xiàn)簡單的停車場管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的停車場管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

岱山县| 宕昌县| 黄梅县| 黔南| 浏阳市| 马公市| 沙湾县| 合作市| 永州市| 富宁县| 正阳县| 微山县| 安远县| 遵化市| 元阳县| 酉阳| 贵德县| 安西县| 屯昌县| 华池县| 南靖县| 靖边县| 宿松县| 永城市| 临泉县| 宜州市| 兰州市| 怀远县| 南岸区| 旬邑县| 秀山| 额济纳旗| 大余县| 开封县| 墨脱县| 雷州市| 乌鲁木齐县| 博罗县| 阿拉尔市| 抚宁县| 章丘市|