1 #include "stdafx.h"

2 #include "windows.h"

3

4 bool findNext(int row, intcol); //主要寻路函数,row,col分别为需要确定的行列坐标5 void MyNodePush(int row, intcol); //路径值入栈6 voidMyNodePop(); //路径出栈7 voidMyDodeDelete();//最后的清理函数,用于清除路径栈8 bool isValidPoint(int row, intcol); //判断当前点是否为有效点9 voidDisPlay();//打印路径10 typedef struct_NODE //自定义的结点,栈用双向链表来构造11 {12 introw;13 introl;14 struct _NODE *NextNode;15 struct _NODE *BackNode;16 }NODE, *PNODE;17

18

19 BYTE myStr[11][16] = { 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x20, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A,20 0x20, 0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x20, 0x2A, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A,21 0x20, 0x20, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x2E, 0x2E, 0x2E, 0x2A, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x20, 0x2A, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A, 0x2E, 0x2A, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A,22 0x2A, 0x20, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x20, 0x20, 0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2E, 0x2E, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A,23 0x20, 0x2A, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A, 0x43, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x58, 0x2E, 0x2E, 0x2A,24 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A};25 //迷宫,0x2a为墙 0x58为终点,

26

27 PNODE HeadNode;//栈底指针28 PNODE CurrentNode;//栈顶指针29 int _tmain(int argc, _TCHAR*argv[])30 {31 HeadNode = (PNODE)malloc(sizeof(NODE)); //为头结点分配内在32 memset(HeadNode, -1, sizeof(NODE));33 CurrentNode =HeadNode;//栈底栈顶指针初始时为重合34

35 if (findNext(1, 0))//开始寻路,初始位置为(1,0)36 {37 DisPlay();38 }39 else

40 {41 printf_s("no way to get out from the maze");42 }43

44 /*

45 MyNodePush(1, 2);46 MyNodePop();47 MyNodePush(1, 2);48 MyNodePush(1, 2);49 MyNodePop();50 MyNodePush(1, 2);51 */

52 MyDodeDelete();53 system("pause");54 return 0;55 }56 bool findNext(int row, intcol)57 {58 MyNodePush(row, col); //将此点入栈59 if (myStr[row][col] == 0x58) //判断是否为终点是的话返回正确60 return true;61 if (!isValidPoint(row, col)) //如果是墙或者超过了迷宫范围则该点出栈并返回错62 {63 MyNodePop();64 return false;65 }66 if (findNext(row - 1, col) || findNext(row + 1, col) || findNext(row, col - 1) || findNext(row, col + 1))//递归的寻找该点的上下左右四个点,只要有一个点返回真则可以判断路径为真,因为只有当点为终点的时候才会返回真,这里可以优化,由那一点走过来可以不用寻找67 {68 return true;69 }70 else

71 {72 MyNodePop();//如果从该点上下左右四个点出发的路径都不能找到终点,则该点不可能位于正确路径上。73 return false;74 }75 }76 void MyNodePush(int row, intcol)77 {78 PNODE NewNOde =(PNODE) malloc(sizeof(NODE));79 NewNOde->row =row;80 NewNOde->rol =col;81 NewNOde->NextNode =NULL;82 NewNOde->BackNode =CurrentNode;83 CurrentNode->NextNode =NewNOde;84 CurrentNode =NewNOde;85 }86 voidMyNodePop()87 {88 if (CurrentNode !=HeadNode)89 {90 CurrentNode->BackNode->NextNode =NULL;91 PNODE temp = CurrentNode->BackNode;92 free(CurrentNode);93 CurrentNode =temp;94 }95

96 }97 voidMyDodeDelete()98 {99 if (CurrentNode ==HeadNode)100 return;101 PNODE nodeToDelete =HeadNode;102 while (true)103 {104 PNODE temp =nodeToDelete;105 if (nodeToDelete->NextNode ==NULL)106 {107 free(nodeToDelete);108 break;109 }110 nodeToDelete = nodeToDelete->NextNode;111 free(temp);112 }113 }114 bool isValidPoint(int row, intcol)115 {116 if (row < 0 || row>10 || col < 0 || col>15)//这里根据是否是墙,或者超过迷宫边界判断117 return false;118 if (myStr[row][col] == 0x2a)119 return false;120 PNODE temp =HeadNode;121 while (temp->NextNode!=NULL)//这里遍历已经访问过的结点,如果已访问过,则返回错误122 {123 if (row == temp->row && col == temp->rol)124 return false;125 temp = temp->NextNode;126 /*

127 if (temp->NextNode == NULL)128 {129 if (row == temp->row && col == temp->rol)130 return false;131 break;132 }133 */

134 }135 return true;136 }137 voidDisPlay()138 {139 PNODE temp =HeadNode;140 while (temp->NextNode !=NULL)141 {142 if (temp !=HeadNode)143 printf_s("%x,%x\n", temp->row, temp->rol);144 temp = temp->NextNode;145 if (temp->NextNode ==NULL)146 {147 printf_s("%x,%x\n", temp->row, temp->rol);148 break;149 }150 }151 }

java动画迷宫寻路_迷宫寻路算法相关推荐

  1. 数据结构实验之图论四:迷宫探索_迷宫搜索类的双向bfs问题(例题详解)

    前言 文章若有疏忽还请指正! 更多精彩还请关注公众号:bigsai 头条号:一直码农一直爽 在搜索问题中,以迷宫问题最具有代表性,无论是八皇后的回溯问题,还是dfs找出口,bfs找最短次数等等题目的问 ...

  2. c++ 迷宫思路_迷宫问题求解——C++

    迷宫问题思路 根据昨天的博客,有如下几种解决方案 克鲁斯卡尔 ,为避免死循环,需要设定优化路径的次数. Prim,为避免死循环,需要设定优化路径的次数,暂定200次. BFS , 实现简单,无死循环. ...

  3. 星之卡比镜之迷宫机器人_迷宫武器盘点 | 是兄弟,就拿大宝剑砍我!

    大家好,是我 想死大家的放牛小编 随着时代与科技的发展 冷兵器已经逐渐淡出了咱们的视线 火箭炮.手榴弹.AK47-- 物理超度,才是男人的浪漫 但如果现在手里有着一把剑 小编就瞬间就进入了了" ...

  4. java实现数据结构基数排序_数据结构与算法——基数排序简单Java实现

    1 packageahe.sort;2 3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io.Input ...

  5. java微信红包开发_微信红包算法(java)

    package com.example.ant.common.tools; import java.util.LinkedList; import java.util.List; /** * 描述:红 ...

  6. java 贪吃蛇碰撞检测_温习数据算法—贪吃蛇

    前言很多朋友学习了计算机语言后都做过贪吃蛇的游戏(VB,C,C++,C#,JAVA,JQuery等),现在估计很多人都忘记怎么写了. 我们现在用jquery+css来实现一个贪吃蛇的游戏效果. 这里主 ...

  7. java实现一个感知机_感知机学习算法Java实现

    感知机学习算法Java实现. Perceptron类用于实现感知机, 其中的perceptronOriginal()方法用于实现感知机学习算法的原始形式: perceptronAnother()方法用 ...

  8. java穷举密码_穷举算法和递推算法(Java)

    穷举算法 概念: 最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况.穷举算法效率不高,但是适合一些没有明显规律可循的场合. 思想: 在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范 ...

  9. java动画火柴人_基于html的火柴人羽毛球游戏

    一.游戏简介 火柴人羽毛球灵感来自于flash小游戏 游戏中,玩家可操作画面中的火柴人来进行羽毛球比赛 通过键盘上的左右键控制火柴人的左右移动,按上键跳跃,按下键挥拍击球 当某一方分数达到7分即判定取 ...

最新文章

  1. (002)RN开发之第一个项目以及真机运行
  2. wordpress 外部数据接口_WordPress Plugin API(插件接口)
  3. 我在老男孩学python的日子_day1
  4. word公式插件_再也不用担心我的公式写不出来了:一款公式输入神器实测
  5. python绘制散点图、如何选两列作为横坐标_在matplotlib散点图(水平杆图)中从x=0到数据点绘制水平线...
  6. laravel自动建mysql索引_让 Laravel 优雅地创建 MySQL 全文索引
  7. vb 通过php连接mysql数据库连接_php连接mysql数据库
  8. [Selenium]通过Selenium实现在当前浏览器窗口点击一个图标之后,弹出另外一个窗口,关闭这个窗口,再回到原来的窗口进行操作...
  9. Geoserver 发布 shp文件
  10. 数据挖掘原理与算法_【干货】UIUC韩家炜老师2020年新课:CS512 数据挖掘:原理与算法,附PPT...
  11. PHP获取汉字笔画数功能
  12. 【课程作业】学术英语写作:文献阅读报告1
  13. qt 取消按钮点击效果_Qt 对话框里添加确定取消按钮
  14. 谈谈新加坡的电子政务
  15. 【BZOJ4049】[Cerc2014] Mountainous landscape(线段树+凸包+二分)
  16. Axure8实现最常见的左侧动态导航
  17. 【Unity使用UGUI实现王者荣耀UI界面(四)】游戏开始界面
  18. 千张照片合成你一张美照-【OpenCV实战二】
  19. 【原】Java学习笔记025 - 内部类
  20. 揭秘:广告拦截软件如何赚钱?

热门文章

  1. TimestampUtil时间处理工具类
  2. 海外服务器跟国内服务器对比分别有哪些优势呢
  3. opencv实现matlab的median()函数
  4. 完美删除Mac Os自带输入法
  5. FingerGestures研究院之初探Unity手势操作(一)
  6. C语言关键字浅析-enum
  7. BTC公钥生成地址的过程详解
  8. python输入一个数组、以逗号为间隔_python-使用间隔掩码numpy数组
  9. 安卓app开机自启动的几种方式
  10. android虚拟内置sd卡,安卓虚拟器bluestacks虚拟sd卡打开方法【图解】