机器寻径引导算法C#(最短路径表)
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GrapCity.Competition.CastleRush.Ai;
using GrapCity.Competition.CastleRush.Ai.View; namespace _D01B6320_82D9_4D54_AFC9_C502657F2D99_
{
public class AimStartOnPosition
{
//全局变量
int[,] Arr = new int[, ];//迷宫算法:最大迷宫为50*50
Position BeginPos;
MapView MAP = new MapView(); bool canplace(int prePosValue, int x, int y)//判断当前点能否走通
{
if (x >= && y >= && x < MAP.Map.GetLength() && y < MAP.Map.GetLength() && Arr[x, y] != -)//未越界且不是障碍物(-1)
{
if (Arr[x, y] == ) return true;//该点还未走过
else return (prePosValue + ) < Arr[x, y];//该点走过,选择更近的路径
}
return false;
}
public Stack<Position> path = new Stack<Position>();//记录路径
void search(Position CurP)
{
int x, y, num;
Position NewCurP;
num = Arr[CurP.X, CurP.Y];
x = CurP.X - ; y = CurP.Y; //(左)
NewCurP = new Position(x, y);
{
if (canplace(num, x, y))
{
Arr[x, y] = num + ;
path.Push(NewCurP);//进栈
search(NewCurP); //深度优先搜索
path.Pop();//出栈
}
}
x = CurP.X; y = CurP.Y + ;//(下)
NewCurP = new Position(x, y);
{
if (canplace(num, x, y))
{
Arr[x, y] = num + ;
path.Push(NewCurP);//进栈
search(NewCurP);
path.Pop();//出栈
}
}
x = CurP.X + ; y = CurP.Y;//(右)
NewCurP = new Position(x, y);
{
if (canplace(num, x, y))
{
Arr[x, y] = num + ;
path.Push(NewCurP);//进栈
search(NewCurP);
path.Pop();//出栈
}
}
x = CurP.X; y = CurP.Y - ;//(上)
NewCurP = new Position(x, y);
{
if (canplace(num, x, y))
{
Arr[x, y] = num + ;
path.Push(NewCurP);//进栈
search(NewCurP);
path.Pop();//出栈
}
}
} public int[,] ShortestPath(Position BeginPosition, MapView map)//特殊之处:BeginPosition
{
MAP = map;//全局化map变量
BeginPos = new Position(BeginPosition.X, BeginPosition.Y);//将起始点全局化
for (int i = ; i < map.Map.GetLength(); i++)//列 //初始化地图数组Arr
{
for (int j = ; j < map.Map.GetLength(); j++)//行
{
if (map.Map[i, j].GetItemType() == ItemType.River
|| map.Map[i, j].GetItemType() == ItemType.Mine
|| map.Map[i, j].GetItemType() == ItemType.Caslte)
{ Arr[i, j] = -; }//骑士不可走过
else //路、骑士
{ Arr[i, j] = ; }//骑士可走
}
}
Arr[BeginPos.X, BeginPos.Y] = ;//起点位置为1
search(BeginPos);//搜索最短路径
for (int i = ; i < map.Map.GetLength(); i++)//列 //初始化地图数组Arr
{
for (int j = ; j < map.Map.GetLength(); j++)//行
{
if (Arr[i, j] == )
{ Arr[i, j] = ; }//对于那些不可达的路(仁保持着原数组值),修改为无穷远10000 }
} return Arr;
}
}
}
机器寻径引导算法C#(最短路径表)的更多相关文章
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- Dijkstra算法求最短路径(java)(转)
原文链接:Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到 ...
- dijkstra算法计算最短路径和并输出最短路径
void dijisitela(int d, int m1) { ], book[], path[], u, v, min; l = ; ; i < n1; i++) { dis[i] = w[ ...
- js迪杰斯特拉算法求最短路径
1.后台生成矩阵 名词解释和下图参考:https://blog.csdn.net/csdnxcn/article/details/80057574 double[,] arr = new double ...
- 算法学习 - ST表 - 稀疏表 - 解决RMQ问题
2017-08-26 21:44:45 writer:pprp RMQ问题就是区间最大最小值查询问题: 这个SparseTable算法构造一个表,F[i][j] 表示 区间[i, i + 2 ^ j ...
- 4003.基于Dijsktra算法的最短路径求解
基于Dijsktra算法的最短路径求解 发布时间: 2018年11月26日 10:14 时间限制: 1000ms 内存限制: 128M 有趣的最短路...火候欠佳,目前还很难快速盲打出来,需继 ...
- [算法模板]ST表
[算法模板]ST表 ST表和线段树一样,都能解决RMQ问题(范围最值查询-Range Minimum Query). 我们开一个数组数组\(f[maxn][maxn\log_2]\)来储存数据. 定义 ...
- NetworkX系列教程(10)-算法之一:最短路径问题
小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...
- 基于Dijsktra算法的最短路径求解
基于Dijsktra算法的最短路径求解 描述 一张地图包括n个城市,假设城市间有m条路径(有向图),每条路径的长度已知.给定地图的一个起点城市和终点城市,利用Dijsktra算法求出起点到终点之间 ...
随机推荐
- mysql5.7 安装常见问题
mysql 5.7安装要执行以下三个命令: 1.mysql install2.mysqld --initialize3.net start mysql 第一个命令可能会出现Install/Remove ...
- 新Linux系统配置yum源
新的Linux系统安装好以后,yum的源还是需要配置一下的,我使用的是redhat6.6版本,同时为了不注册而使用更多的yum源的资源,也需要做一下的修改. 1. 删除redhat原有的yum源 # ...
- WPF:ComboBox使用XmlDataProvider做级联
程序功能: 使用ComboBox做级联,数据源为XML文件,适合小数据量呈现 程序代码: <Window x:Class="WpfApplication1.LayouTest" ...
- 写一个简易浏览器、ASP.NET核心知识(3)
前言 先在文章前面说好了,省得大家发现我根本没有这样的头发,duang的一下一堆人骂我. 这篇文章的标题有点大,其实挺low的,我需要在开头解释一下.我这里只想写一个小的控制台,旨在模拟浏览器的htt ...
- 关于Http协议、ASP.NET 核心知识(2)
简介HTTP (对于http协议的描述我前部分有写,但基于保证文档独立完整性的原则,我再写一遍.反正又不花钱.) 这货的学名叫:超文本传输协议 英文名字:(HTTP,HyperText Transfe ...
- Count on a tree(SPOJ COT + 树上第k大 + 主席树 + LCA)
题目链接:https://www.spoj.com/problems/COT/en/ 题目: 题意: 给你一棵有n个节点的树,求节点u到节点v这条链上的第k大. 思路: 我们首先用dfs进行建题目给的 ...
- react-native关于ios的启动图标设置
1.首先我们需要使用xcode打开项目,选择项目中的images.xcassets这个文件夹 2.点击AppIcon可以看到右边出现针对不同设备的图标尺寸 3.在左边空白处右击,选择Import... ...
- 商城项目(ssm+dubbo+nginx+mysql统合项目)总结(4)
我不会在这里贴代码和详细步骤什么的,我觉得就算我把它贴出来,你们照着步骤做还是会出很多问题,我推荐你们去看一下黑马的这个视频,我个人感觉很不错,一步一步走下来可以学到很多东西.另外,视频和相关文档的话 ...
- linux驱动开发:用户空间操作LCD显示简单的图片【转】
转自:http://blog.csdn.net/changliang7731/article/details/53074616 上一章我们简单介绍了LCD的一些基本原理.当然更深奥的还有,比如gamm ...
- Appium 1.6.3使用的自动化测试引擎
automationName项的值: Appium:默认值. Selendroid:安卓2.3(API 9)-4.1(API 16)版本使用. UiAutomator2:最新安卓版本. XCUITes ...