1 #include <stdlib.h>
#include <stdio.h> #define stackinitsize 50
#define stackincrement 8 typedef struct {
int x,y;
}posttype; typedef struct {
int ord;
posttype seat;
int di;
}elemtype; typedef struct{
elemtype *base;
elemtype *top;
int stacksize;
}sqstack; int initstack(sqstack &s)
{s.base=(elemtype * ) malloc(stackinitsize*sizeof(elemtype));
s.top=s.base;
s.stacksize=stackinitsize;
return ;
} int push(sqstack &s,elemtype e)
{
(*(s.top)).ord=e.ord;
(*(s.top)).seat.x=e.seat.x;
(*(s.top)).seat.y=e.seat.y;
(*(s.top)).di=e.di;
s.top++;
return ;
} //elemtype gettop(sqstack s)
//{
// return *(s.top-1);
// } int emptystack(sqstack s)
{if (s.top==s.base) return ;
else return ;
} int pop(sqstack &s,elemtype &e)
{ if (emptystack(s)) return ;
--s.top;
e.ord=(*(s.top)).ord;
e.seat.x=(*(s.top)).seat.x;
e.seat.y=(*(s.top)).seat.y;
e.di=(*(s.top)).di;
return ;
}

#include <stdio.h>
# include "d:\maze\mystack.h" #define TRUE 1
#define FALSE 0 int a[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}; typedef int Status; Status pass(posttype curpos)
{
if (a[curpos.x][curpos.y]==0)
return 1;
else
return 0;
} Status mazepath(int maze[10][10],posttype start,posttype end,sqstack &s)
{
int curstep;
posttype curpos;
elemtype e;
initstack(s);
curpos.x=start.x;curpos.y=start.y;
curstep=1;
do{
if(pass(curpos))
{
// footprint(curpos);//stroe foot e.ord=curstep;
e.seat.x=curpos.x;
e.seat.y=curpos.y;
e.di=1;
push(s,e);
if(curpos.x==end.x && curpos.y==end.y) return(TRUE);
curpos.y=curpos.y+1;//east near
curstep++;
}
else
{
if(!emptystack(s))
{
pop(s,e);
while(e.di==4 && !emptystack(s))
{
// markprint(s.seat);//outprint reverse
pop(s,e);
}//end while
if(e.di<4)
{
e.di++;push(s,e);
switch(e.di)
{
case 1:curpos.y=curpos.y+1;break;
case 2:curpos.x=curpos.x+1;break;
case 3:curpos.y=curpos.y-1;break;
case 4:curpos.x=curpos.x-1;break;
}
}//if(di<4)
}//if(!emptystack(s))
}//else
}while(!emptystack(s));
return FALSE;
} void outputstak(sqstack s)
{
elemtype e;
while(!emptystack(s))
{
pop(s,e);
printf("%d (%d,%d) %d\n",e.ord,e.seat.x,e.seat.y,e.di);
}
} main()
{
posttype start,end;
start.x=1;start.y=1;
end.x=8;end.y=8;
sqstack s1;
if(mazepath(a,start,end,s1)==TRUE)
outputstak(s1);
else
printf("\nno path....");
}

  

迷宫 maze的更多相关文章

  1. JZOI1134 迷宫(maze)

    #include <bits/stdc++.h> #define ll long long #define INF 2147483647 #define mem_INF 213906214 ...

  2. 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

    一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...

  3. golang 实现广度优先算法(走迷宫)

    maze.go package main import ( "fmt" "os" ) /** * 广度优先算法 */ /** * 从文件中读取数据 */ fun ...

  4. php生成迷宫和迷宫寻址算法实例

    较之前的终于有所改善.生成迷宫的算法和寻址算法其实是一样.只是一个用了遍历一个用了递归.参考了网上的Mike Gold的算法. <?php //zairwolf z@cot8.com heade ...

  5. 【noip 模拟赛curse,light,maze】 题解

    2018.10.16 总结:考的不好 原因: 1.考的时候没状态,读题读不进去 2.考的时候不仔细,该得分没得到 T1:curse 1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到 ...

  6. maze writeup

    maze writeup 攻防世界的一道迷宫题,第一次接触这样的题,个人感觉很有意思,收获也挺多,做一篇笔记记录一下. 程序分析 __int64 sub_4006B0() { signed __int ...

  7. [python 译] 基于面向对象的分析和设计

    [python 译] 基于面向对象的分析和设计 // */ // ]]>   [python 译] 基于面向对象的分析和设计 Table of Contents 1 原文地址 2 引言 2.1 ...

  8. 面向对象设计——抽象工厂(Abstract Factory)模式

    定义 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类.抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么.这样一来,客户就能从具体的产 ...

  9. 设计模式之生成器(Builder)模式

    意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以表示不同的表示. 适用性 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 当构造过程必须允许被构造的对象有不同的表 ...

随机推荐

  1. PTHREAD_MUTEX_INITIALIZER问题

      PTHREAD_MUTEX_INITIALIZER 与 expected expression before ‘{’ token 在进行 Posix thread 编程时,出现以下编译错误:err ...

  2. 国内流行的两大开源.net微信公众平台SDK对比分析

    最近忙于微信周边的开发 难免手痒去搜索一下有没有相关的sdk直接拿来使 还真发现了不少 这里总结两个看起来比较不错的.net平台下基于C#语言开发的SDK 一个强大一个小巧 (1) Senparc.W ...

  3. MySQL 5.6 解决InnoDB: Error: Table "mysql"."innodb_table_stats" not found.问题

    在安装MySQL 5.6.30时,安装完成后,后台日志报如下警告信息:2016-05-27 12:25:27 7fabf86f7700 InnoDB: Error: Table "mysql ...

  4. oracle-行转列

    <一>合并两个结果集,并且两个结果集的数据 根据条目自动归为一行结果集1 如下:SQL> select t1.fplx,t1.djje from yw_zjfpjl t1  ; FP ...

  5. kvc简单实现

      除了一般的赋值和取值的方法,我们还可以用Key-Value-Coding(KVC)键值编码来访问你要存取的类的属性 kvc: kvc    key value coding 键值对编码 可以通过 ...

  6. block 浅析

    最近讲了一个关于block的例子 block 可以作为一个参数 进行传递 需要注意的地方是 :block 虽然作为一个参数 但是在函数方法执行的时候 block 是不会在定义它的地方调用 除非你在后边 ...

  7. c++primerplus(第六版)编程题——第5章(循环和关系表达式)

    声明:作者为了调试方便,每一章的程序写在一个工程文件中,每一道编程练习题新建一个独立文件,在主函数中调用,我建议同我一样的初学者可以采用这种方式,调试起来会比较方便. (具体方式参见第3章模板) 1. ...

  8. 浅说prop与attr的区别

    jquery中attr和prop的区别   在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答 ...

  9. jQuery判断文本框是否为空

    1.引用jQuery库 <script src="/static/js/jquery_v1.6.1.js" type="text/javascript"& ...

  10. C语言结构体(struct)使用方法

    基本定义:结构体,通俗讲就像是打包封装,把一些变量有共同特征(比如同属于某一类事物的属性)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 struct stuf ...