C語(yǔ)言通過(guò)棧實(shí)現(xiàn)小人走迷宮
更新時(shí)間:2022年03月02日 09:49:10 作者:reg183
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言通過(guò)棧實(shí)現(xiàn)小人走迷宮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C語(yǔ)言通過(guò)棧實(shí)現(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);//只有能通過(guò)才壓棧
?? ??? ??? ?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);//如果不能通過(guò)就彈棧
?? ??? ??? ?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));
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
OpenCV3實(shí)現(xiàn)車牌識(shí)別(C++版)
這篇文章主要為大家詳細(xì)介紹了OpenCV3實(shí)現(xiàn)車牌識(shí)別功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
基于Qt+opencv開(kāi)發(fā)的視頻播放器示例詳解
這篇文章主要為大家介紹了基于Qt+opencv開(kāi)發(fā)的視頻播放器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
C語(yǔ)言實(shí)現(xiàn)三子棋游戲(初級(jí)版)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋游戲初級(jí)版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的停車場(chǎng)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的停車場(chǎng)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03

