zoukankan      html  css  js  c++  java
  • 重新整理数据结构与算法——迷宫算法[九]

    前言

    以前玩好记心的时候有一个迷宫游戏,其中呢,就有一个答案,给出如何出迷宫,给的答案是最短路径。

    当时想想还是很神奇的,但是呢,后来学了计算机后,其实就是通过计算机一步一步的是尝试,然后得到最短路径,然后通过ui给我们渲染出来。

    正文

    首先呢,要设置一个封闭的地图。

    画完之后就是:

    然后我们需要设置一些障碍:

    我下面加上的障碍是:

    蓝色部分为障碍,同时设置了终点。

    然后我们开始一个探索思路:

    1.需要一个起点,这个起点需要做判断是否越界,然后同时需要判断是否该点就是封闭点。

    2.探路规则为先下,后右,然后上,做好左,如果都走不通,那么直接设置为该点走不通。

    3.设置终点的条件。

    代码

    主方法:

    static void Main(string[] args)
    {
    	int[,] arr = new int[9,9];
    	//形成一张封闭的地图
    	for (int i = 0; i < 9; i++)
    	{
    		arr[0, i] = 1;
    		arr[8, i]=1;
    		arr[i, 0] = 1;
    		arr[i, 8] = 1;
    	}
    	//设置一些障碍
    	arr[3, 1] = 1;
    	arr[3, 2] = 1;
    	arr[5, 3] = 1;
    	arr[5, 4] = 1;
    	arr[6, 6] = 1;
    
    	//显示该地图的情况
    	Console.WriteLine("展示地图");
    	showMap(arr);
    	Console.WriteLine("开始探索地图");
    	setWay(arr,1, 1);
    	showMap(arr);
    	Console.ReadKey();
    }
    

    方法函数:

    /// <summary>
    ///  开始探路
    /// </summary>
    /// <param name="map"></param>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public static Boolean setWay(int[,] map,int x,int y)
    {
    	if (x > 8|| y > 8)
    	{
    		return false;
    	}
    	if (map[7,7]==2)
    	{
    		return true;
    	}
    	if (map[x, y] == 0)
    	{
    		//假设可以走过
    		map[x, y] = 2;
    		//那么向下走
    		if (setWay(map, x + 1, y))
    		{
    			return true;
    		}
    		//向右走
    		else if (setWay(map, x, y + 1))
    		{
    			return true;
    		}
    		//向上走
    		else if (setWay(map, x - 1, y))
    		{
    			return true;
    		}
    		//向左走
    		else if (setWay(map, x, y - 1))
    		{
    			return true;
    		}
    		else
    		{
    			//都走不通
    			map[x, y] = 3;
    			return false;
    		}
    	} 
    	else
    	{
    		//没有走过
    		return false;
    	}
    }
    
    public static void showMap(int[,] map)
    {
    	for (int i = 0; i < 9; i++)
    	{
    		for (int j = 0; j < 9; j++)
    		{
    		  Console.Write(map[i,j] + " ");
    		}
    		Console.WriteLine("");
    	}
    }
    

    运行结果:

    总结

    迷宫算法上面用递归实现,其实就是一个回溯问题。下一章,八皇后递归,之后就是图,也可以说是矩阵。

  • 相关阅读:
    Nbear实体和接口 CodeSmith模版
    prototype1.4版中文参考手册(word,pdf,chm)
    SharePoint 2013 (SharePoint 15)的新特性
    没有域环境下安装SharePoint 2010
    产品经理(PM)常用原型图设计工具
    【转贴】mysql导入数据load data infile用法
    重新学javaweb!
    关于HIbernate中的lazy属性的一些解释
    JAVA程序员基本测试题目
    添加sql server约束
  • 原文地址:https://www.cnblogs.com/aoximin/p/13156427.html
Copyright © 2011-2022 走看看