顺序表之迷宫问题(C实现)
2015-11-22 13:20
260 查看
迷宫图
data.h
初始状态图
寻找出口过程图
找到出口图
*该程序按任意键就会移动寻找出口的那个物体
data.h
#ifndef _DATA_H #define _DATA_H typedef struct { int y; int x; }POS; typedef struct { int sno; POS seat; int di; }ElemType; #endifstack.h
#ifndef _STACK_H #define _STACK_H #include "data.h" #define STACK_INIT_SIZE 10 #define STACK_INCREME 10 typedef struct { 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); #endifstack.c
#include "stack.h" #include <stdio.h> #include <stdlib.h> STACK * InitStack() { STACK * s = (STACK *)malloc(sizeof(STACK)); if(s == NULL) exit(0); s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); if(s->base == NULL) exit(0); s->top = s->base; s->size = STACK_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 + STACK_INCREME) *sizeof(ElemType)); if(s->base == NULL) return 0; s->top = s->base + s->size; s->size = s->size + STACK_INCREME; } // *s->top = *e; // s->top ++; *s->top++ = *e; return 1; } int Pop(STACK *s,ElemType *e) { if(s == NULL || e == NULL) return 0; if(s->base == s->top) return 0; *e = *--s->top; return 1; } int IsEmpty(STACK *s) { return s->top == s->base ? 1 : 0; }main.c
#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)//0,1,2,3 { POS p = curP; switch(di) { case 0: p.x --; break; case 1: p.y++; break; case 2: p.x++; break; case 3: p.y--; } 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() { ElemType e; int setp = 1; POS curPos = inPos; STACK *s = InitStack(); PrintItem(inPos); getch(); do { if(IsPass(curPos)) { e.sno = 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) { printf("OK"); break; } PrintItem(curPos); getch(); curPos = NextPos(curPos,0); setp++; }else { Pop(s,&e); while(e.di == 4 && !IsEmpty(s)) { item[curPos.y][curPos.x] = 3; Pop(s,&e); } if(e.di < 3) { e.di++; Push(s,&e); curPos = NextPos(e.seat,e.di); } } } while(!IsEmpty(s)); }VC6运行效果图
初始状态图
寻找出口过程图
找到出口图
*该程序按任意键就会移动寻找出口的那个物体
相关文章推荐
- 问题1 String类和Object类中的equals方法比较
- 冒泡排序
- ubuntu14.04切换root用户
- 实现m*n型数列相加(重载运算符)
- [翻译]Shape comparison language
- windows下mysql提示Can't connect to MySQL server on 'localhost'
- 【BZOJ】1367: [Baltic2004]sequence
- VMware中安装RHEL 7.1后出现锁屏的解决方法
- jaxb中的类继承
- KNN的一些总结
- LeetCode 060 Permutation Sequence
- 学生成绩管理系统课程设计(C语言,链表实现)
- Shape comparison language
- Gson简要使用笔记
- 屏幕自动旋转和调节大小
- 【LeetCode OJ 011】Container With Most Water
- C#实现文件夹基本操作
- 架构的那些事1--分层框架
- gdb参考手册
- 【BZOJ】1135: [POI2009]Lyz