资源简介
数据结构里的迷宫问题,从文件中读取迷宫文件,然后得出解法,存入新的文件
代码片段和文件信息
#include
#include
#include
#include“string.h“
#define MAX_SIZE 10 //迷规模
#define TRUE 1
#define FALSE 0
#define PASS 0 //通路
#define WALL 1 //障碍
#define IN 2 //入口
#define OUT 3 //出口
#define WAY 4 //路径
int GQ=1;
typedef struct POINT
{
int xy; //该点的坐标
int flag; //方向标记位
}POINT;
typedef struct MAZE
{ int maze[MAX_SIZE][MAX_SIZE]; //迷宫的各点的状态
int xy; //迷宫的行、列数
int in_xin_y; //迷宫入口坐标
int out_xout_y; //迷宫出口坐标
}MAZE;
typedef struct STACK {
POINT road; //存放路径信息
struct STACK *next; //下一个路径
}STACK; //链栈形式
int Meun(void);
MAZE *CreateMaze(void); void Show(MAZE *);
void WriteFile(MAZE *char *);
MAZE *ReadFile(char *);
void Quit(void);
void FindWay(MAZE *);
STACK *InitStack(void);
MAZE *Push(STACK *POINTMAZE *);
MAZE *Pop(STACK *MAZE *);
int IsEmpty(STACK *);
POINT GetTop(STACK);
main() {
MAZE *G;
int choose;
char fname[10];
choose = Meun();
char tt;
system(“cls“);
switch(choose)
{
case 1:
printf(“\n您有inA、inB、inC、inD四个迷宫选择,请输入你选择的迷宫:“);
scanf(“%s“&fname);
G = ReadFile(fname);
printf(“文件中的迷宫如下:\n“);
Show(G);
printf(“入口为:(%d,%d)\n出口为:(%d,%d)\n“G->in_xG->in_yG->out_xG->out_y);
break;
case 2:exit(0);
default:printf(“\n输入的选项有误!\n“);
exit(0); }
printf(“\n按任意键查看结果“);
getch();
system(“cls“);
FindWay(G);
free(G);
printf(“\n按任意键继续“);
getch();
system(“cls“);
Quit(); }
//取栈顶
POINT GetTop(STACK s) {
POINT q;
q.x = q.y = -1;
q.flag = 0;
q = s.next->road;
return q; }
//判空
int IsEmpty(STACK *s) {
if (s->next == NULL) return TRUE;
return FALSE; }
//出栈操作
MAZE *Pop(STACK *sMAZE *G) { STACK *t;
t = s->next; //在出栈的同时让该点的状态回归PASS
s->next = t->next;
G->maze[t->road.x][t->road.y] = PASS;
free(t);
return G; }
//入栈操作
MAZE *Push(STACK *sPOINT pMAZE *G)
{ STACK *t;
t = (STACK *)malloc(sizeof(STACK));
t->road = p;
t->next = s->next; //在入栈的同时让该点的状态变为WAY
s->next = t;
G->maze[p.x][p.y] = WAY;
return G; }
//栈的初始化
STACK *InitStack(void) {
STACK *s;
s = (STACK *)malloc(sizeof(STACK));
s->next = NULL; return s; }
//找出路
void FindWay(MAZE *G) {
STACK *stack; POINT p;
stack = InitStack();
p.x = G->in_x; //将入口坐标入栈
p.y = G->in_y;
p.flag = 0;
G = Push(stackpG);
do {
switch(p.flag)
{ case 0:
if (p.y+1 >= 0 && p.y+1 < G->y && G->maze[p.x][p.y+1] == PASS)
{
stack->next->road.flag++;
p.y = p.y + 1;
p.flag = 0;
G = Push(stackpG); //尝试向当前坐标的右边走
break;
} else stack->next->road.flag++;
相关资源
- C++读取csv到数组.zip
- C++四步相移求得包裹/展开相位
- [C++大学教程 C++ How to program(第九版)
- 基于QT的局域网聊天软件开发文献综述
- C++/MFC高清视频教程
- c++经典例题
- VS2010C++调用python报错无法打开包括文
- 一次性口令身份认证的设计与实现c
- 数据结构研讨代码以及ppt
- 画线算法C++的实现-鼠标交互
- n元哈夫曼编码
- C++机房收费系统
- 数据结构和算法案例-欢乐五子棋 C+
- 操作系统进程调度C++代码实现
- 操作系统请求分页存储器管理C++代码
- C++语言标准化考试系统
- 卡尔曼滤波C++代码实现.zip
- 基于c++的markdown解析器
- c语言程序实现PC端通过USB端口与单片
- Draw项目的地址.txt
- 基于opencv的C++人眼识别以及眨眼检测
- 在VS2012上基于opencv的C++人眼识别与眨
- linux 下 python调用c或者c++编写的代码使
- The C++ IO Streams and Locales
- c++primer 第五版 源代码
- C++ Qt5实现RSA加解密
- MD5算法c++程序设计实现
- 链表实现集合的交叉并运算c++.cpp
- QT编写的电子时钟 c++源码
- 学生成绩管理系统C++QT可视化
评论
共有 条评论