简简单单的寻路算法

今天搞了寻路算法   搞了好久  唉  瞬间感觉智商捉急啊  = =

直接上代码咯

主函数:

            //  随机生成一个10*10的迷宫(可以用*表示起点,#表示终点,0代表不可以通过,1代表可以通过),假如[0,0] 为入口 [9,9] 为出口。
            //   (1)在控制台上显示该迷宫
            //   (2)利用栈结构求解该迷宫是否能抵达出口(入口与出口是否联通)。
            //   (3)如能抵达出口,输出从入口到出口的行走路径。

            Maze maze = new Maze();
            maze.Show();
            maze.Find();
            maze.Show();                        

maze类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace cs12
{
        public struct Position    {        public int x;        public int y;        public Position(int x, int y)        {            this.x = x;            this.y = y;        }    }
    class Maze
    {
        Position pos = new Position(0, 0);
        int[,] map = new int[10, 10];
        public Stack<Position> route = new Stack<Position>();

        public Maze () {
            Random rd = new Random();
            for (int i = 0; i < this.map.GetLength(0); i++)
            {
                for (int j = 0; j < this.map.GetLength(1); j++)
                {
                    this.map[i, j] = rd.Next(4);
                    if (this.map[i, j] > 0) {
                        this.map[i, j] = 1;
                    }
                }
            }
            map[0, 0] = 1;
            map[9, 9] = 1;
            route.Push(new Position(0, 0));
            route.Push(new Position(0, 0));
        }
        public void Show()
        {
            for (int i = 0; i < map.GetLength(0); i++)
            {
                for (int j = 0; j < map.GetLength(1); j++)
                {
                    if (i == 0 && j == 0) {
                        Console.Write("* ");
                    }
                    if (map[i, j] == 0)
                    {
                        Console.Write("▓");
                    }
                    else if (map[i, j] == 7 )
                    {
                        Console.Write("⊙");
                    }
                    else
                    {

                        Console.Write("  ");
                    }
                }
                Console.WriteLine();
            }
        }
        public int Find()
        {
            //走,,上下左右
            if (pos.x < 9 && map[pos.x+1, pos.y] == 1)
            {
                pos.x += 1;
                route.Push(new Position(pos.x, pos.y));
                //储存路径
                map[pos.x, pos.y] = 7;
            }
            else if (pos.y < 9 && map[pos.x, pos.y+1] == 1)
            {
                pos.y += 1;
                route.Push(new Position(pos.x, pos.y));
                map[pos.x, pos.y] = 7;
            }
            else if (pos.x > 0 && map[pos.x - 1, pos.y] == 1)
            {
                pos.x -= 1;
                route.Push(new Position(pos.x, pos.y));
                map[pos.x, pos.y] = 7;
            }
            else if (pos.y > 0 && map[pos.x, pos.y-1] == 1)
            {
                pos.y -= 1;
                route.Push(new Position(pos.x, pos.y));
                map[pos.x, pos.y] = 7;
            }
            else
            {
                route.Pop();
                pos = route.Peek();
            }
            Position prepos = route.Peek();
            if (prepos.x == 9 && prepos.y == 9)
            {
                Console.WriteLine("可以到达出口");
                return 0;
            }
            else if (route.Count == 1) {
                return 0;
            }
            else
            {
                return this.Find();
            }

        } 

    }
}

运行结果:

时间: 2024-07-30 14:52:18

简简单单的寻路算法的相关文章

这是一个真正靠谱的寻路算法

绝对没有其他看起来高大上 给别人讲都将不明白的理论.管你 人工智能 啥的 ,还有一百度一大篇的a*算法 ,其实大部分文章的理论都是讲不通的 或者没有讲清楚 更别说代码.做事刨根问底的牛脾气又上来了. 两周前 偶然原因接触到了寻路算法 于是百度 找到了a* .讲来将去大概意思就是持续性的找离目标近的节点 并且走过的节点不能重复走.反正百度搜a*算法 一搜一大片.在很简单的障碍的情况下是没问题 : 但是拐个弯就不行了,不是找最近的么,我让你一直找最近的. 直接迂在里面出不来了: 期间我曾经想过为什么

A*寻路算法入门(一)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 该篇博客由iOS课程团队的Johann Fradj发布,他现在是一个全职开发iOS的开发者.他是Hot Apps Factory(其是App Cooker的创造者)的共同创建

A*寻路算法的优化与改进

提要 通过对上一篇A*寻路算法的学习,我们对A*寻路应该有一定的了解了,但实际应用中,需要对算法进行一些改进和优化. Iterative Deepening Depth-first search- 迭代深化深度优先搜索 在深度优先搜索中一个比较坑爹情形就是在搜索树的一枝上没有要搜的结果,但是却非常深,甚至深不见底,这样就根本搜索不到结果.为了防止这种情况出现,就出现了Iterative Deepening的思想. 迭代深化搜索(Iterative deepening search, IDS)或者

[转] A*寻路算法C++简单实现

参考文章: http://www.policyalmanac.org/games/aStarTutorial.htm   这是英文原文<A*入门>,最经典的讲解,有demo演示 http://www.cnblogs.com/technology/archive/2011/05/26/2058842.html  这是国人翻译后整理的简版,有简单代码demo,不过有些错误,讲得很清晰,本文图片来自这篇 http://blog.csdn.net/b2b160/article/details/4057

HTML5-A*寻路算法

设置起点 设置终点 设置障碍 清除障碍 允许斜向跨越 HTML5-A*寻路算法,布布扣,bubuko.com

RCP:gef智能寻路算法(A star)

本路由继承自AbstactRouter,参数只有EditPart(编辑器内容控制器),gridLength(寻路用单元格大小),style(FLOYD,FLOYD_FLAT,FOUR_DIR). 字符集编码为GBK,本文只做简单的代码解析,源码戳我 如果源码不全,可以联系本人. 算法实现主要有三: 1.Astar单向寻路 2.地图预读 3.弗洛伊德平滑算法 Astar寻路的实现: ANode minFNode = null; while (true) { minFNode = findMinNo

js实现A*寻路算法

这两天在做百度前端技术学院的题目,其中有涉及到寻路相关的,于是就找来相关博客进行阅读. 看了Create Chen写的理解A*寻路算法具体过程之后,我理解A*算法的原理,不得不说作者写的很好,通熟易懂,图片也做的很好,可见作者在这上面是花了心思的.如果让我写,我是写不来这么好的. 唯一的不足就是,因为我学的是js,因此最后给我的源码我是用不了的......因此才有自己写一篇的打算,方面学习js人的学习.然而前面的描述我就借用他的了,因为如果然我的表达能力实在是太渣了. 简易地图 如图所示简易地图

算法:Astar寻路算法改进,双向A*寻路算法

早前写了一篇关于A*算法的文章:<算法:Astar寻路算法改进> 最近在写个js的UI框架,顺便实现了一个js版本的A*算法,与之前不同的是,该A*算法是个双向A*. 双向A*有什么好处呢? 我们知道,A*的时间复杂度是和节点数量以及起始点难度呈幂函数正相关的. 这个http://qiao.github.io/PathFinding.js/visual/该网址很好的演示了双向A*的效果,我们来看一看. 绿色表示起点,红色表示终点,灰色是墙面.稍浅的两种绿色分别代表open节点和close节点:

ActionScript 3.0 实现的A*寻路算法源代码

首先是文档类Index.as: package code{ import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFormat; public class Index extends Sprite{ private var road:Road; public function Index(){ stage.align = "TL"; stage.scaleMode = "