iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言通过栈实现小人走迷宫
  • 845
分享到

C语言通过栈实现小人走迷宫

2024-04-02 19:04:59 845人浏览 八月长安
摘要

本文实例为大家分享了C语言通过栈实现小人走迷宫的具体代码,供大家参考,具体内容如下 新建stack.h #include "Data.h" #ifndef _STACK_H #de

本文实例为大家分享了C语言通过栈实现小人走迷宫的具体代码,供大家参考,具体内容如下

新建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));

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言通过栈实现小人走迷宫

本文链接: https://www.lsjlt.com/news/140993.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言通过栈实现小人走迷宫
    本文实例为大家分享了C语言通过栈实现小人走迷宫的具体代码,供大家参考,具体内容如下 新建stack.h #include "Data.h" #ifndef _STACK_H #de...
    99+
    2022-11-13
  • 基于C语言实现迷宫游戏的示例代码
    目录C语言迷宫游戏定义地图打印地图方法一打印地图方法二定义起点和终点位置实现读取按键实现小球下向下移动一步总结小球移动规律实现重新打印地图实现连续移动实现小球下向上下左右移动实现小球...
    99+
    2022-11-13
  • C语言实现通用数据结构之通用椎栈
    本文实例为大家分享了C语言实现通用数据结构之通用椎栈的具体代码,供大家参考,具体内容如下 这是在通用链表的基础上实现的椎栈,关于链表的实现参见:C语言实现通用数据结构之通用链表 。 ...
    99+
    2022-11-12
  • C语言实现通讯录小项目
    本文实例为大家分享了C语言实现通讯录小项目的具体代码,供大家参考,具体内容如下 编写程序实现通讯录的基本功能,可以做到增,删,查,改,打印通讯录,等等功能 test.c #inc...
    99+
    2022-11-12
  • C语言实现通讯录小功能
    本文实例为大家分享了C语言实现通讯录功能的具体代码,供大家参考,具体内容如下 头文件contact.h #pragma once #define _CRT_SECURE_NO_...
    99+
    2022-11-12
  • C++中怎么通过C语言实现函数重载
    这篇文章给大家介绍C++中怎么通过C语言实现函数重载,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++函数重载的相关模拟代码:int (*func)(void);   int&...
    99+
    2023-06-17
  • C语言如何实现通用数据结构中的通用椎栈
    今天就跟大家聊聊有关C语言如何实现通用数据结构中的通用椎栈,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。为大家分享了C语言实现通用数据结构之通用椎栈的具体代码,具体内容如下这是在通用...
    99+
    2023-06-21
  • C语言如何实现通讯录小项目
    这篇文章主要介绍了C语言如何实现通讯录小项目,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文实例为大家分享了C语言实现通讯录小项目的具体代码,供大家参考,具体内容如下编写程...
    99+
    2023-06-15
  • C语言模拟实现通讯录程序过程
    目录一、前言二、正文1.大体框架2.界面显示3. 创建通讯录4.初始化通讯录5.增加联系人6.显示联系人7. 删除联系人8.查找联系人9.修改联系人10. 排序联系人一、前言 在上一...
    99+
    2023-02-14
    C语言模拟实现通讯录 C语言模拟通讯录 C语言通讯录
  • 如何通过C语言实现井字棋游戏
    今天就跟大家聊聊有关如何通过C语言实现井字棋游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。井字棋游戏:即三子棋,英文名叫Tic-Tac-Tic,是一种在3*3格子上进行的连珠游戏...
    99+
    2023-06-22
  • shell 通过makefile传参给c语言的实现示例
    最近学习到的传参过程,感觉很实用,稍加拓展可以实现一些有用的功能。建立测试用例建立一个文件夹,命名:zgftestzgftest中包含的文件:makefile、mk.sh、rules.make、zgftest.c 以下分...
    99+
    2023-03-22
    shell 通过makefile传参给c shell makefile传参 makefile传参给c语言
  • shell通过makefile传参给c语言的实现示例
    最近学习到的传参过程,感觉很实用,稍加拓展可以实现一些有用的功能。建立测试用例建立一个文件夹,命名:zgftestzgftest中包含的文件:makefile、mk.sh、rules...
    99+
    2023-03-22
    shell 通过makefile传参给c shell makefile传参 makefile传参给c语言
  • C语言怎么通过递归实现扫雷游戏
    这篇“C语言怎么通过递归实现扫雷游戏”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言怎么通过递归实现扫雷游戏”文章吧。用...
    99+
    2023-06-30
  • C语言通过三种方法实现属于你的通讯录
    目录一、基础版本1.1 通讯录的个人信息(结构体来实现)1.2通讯录名单1.3人员初始化1.4菜单1.5主函数二、功能的实现2.1、增加人数2.2、删除人数2.3、查找2.4、展示2...
    99+
    2022-11-21
    C语言实现通讯录 C语言 通讯录
  • C语言实现扫雷小游戏的全过程记录
    第一步思考要实现的功能 想必大家都知道扫雷这个小游戏,今天我们来用C语言实现一下,首先要扫雷,我们首先就需要有一个布置了雷的棋盘,然后开始扫雷,玩过扫雷的小伙伴都知道,如果选中的格...
    99+
    2022-11-12
  • C语言通过二分查找实现猜数字游戏
    目录二分查找二分查找的思想二分查找的条件二分查找的实现过程代码举例猜数字游戏游戏说明猜数字游戏思想代码实现整体代码演示二分查找 题目: 在一个有序数组中查找具体的某个数字n。 首先我...
    99+
    2023-02-03
    C语言 二分查找实现猜数字 C语言 二分查找 C语言 猜数字
  • C语言实现可增容动态通讯录详细过程
    目录创建可自动扩容的通讯录添加用户信息删除用户信息查找联系人修改用户信息以名字将用户排序销毁通讯录创建可自动扩容的通讯录 这里我们想实现通讯录自动扩容,不够了能扩大内存,变得稍微有点...
    99+
    2022-11-13
  • C语言详细讲解通过递归实现扫雷的展开
    目录用户选择菜单棋盘初始化布置雷(随机布置)打印棋盘玩家下棋棋盘展开展开部分思维导图展开函数最后一个else return 作用周围雷个数判断用户选择菜单 void menu() {...
    99+
    2022-11-13
  • C语言通过三步翻转法实现单词倒置详解
    目录一、解题思路二、完整代码与注释三、代码剖析1.实现字符串整体的翻转2.一个单词的翻转3.字符串中的每一个单词的翻转一、解题思路 如何将一句话的单词倒置,而标点不倒置? 例如:I ...
    99+
    2022-11-13
  • C语言怎么通过二分查找实现猜数字游戏
    本文小编为大家详细介绍“C语言怎么通过二分查找实现猜数字游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么通过二分查找实现猜数字游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。二分查找题目: 在一个...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作