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#(最短路径表)的更多相关文章

  1. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  2. Dijkstra算法求最短路径(java)(转)

    原文链接:Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到 ...

  3. dijkstra算法计算最短路径和并输出最短路径

    void dijisitela(int d, int m1) { ], book[], path[], u, v, min; l = ; ; i < n1; i++) { dis[i] = w[ ...

  4. js迪杰斯特拉算法求最短路径

    1.后台生成矩阵 名词解释和下图参考:https://blog.csdn.net/csdnxcn/article/details/80057574 double[,] arr = new double ...

  5. 算法学习 - ST表 - 稀疏表 - 解决RMQ问题

    2017-08-26 21:44:45 writer:pprp RMQ问题就是区间最大最小值查询问题: 这个SparseTable算法构造一个表,F[i][j] 表示 区间[i, i + 2 ^ j ...

  6. 4003.基于Dijsktra算法的最短路径求解

    基于Dijsktra算法的最短路径求解 发布时间: 2018年11月26日 10:14   时间限制: 1000ms   内存限制: 128M 有趣的最短路...火候欠佳,目前还很难快速盲打出来,需继 ...

  7. [算法模板]ST表

    [算法模板]ST表 ST表和线段树一样,都能解决RMQ问题(范围最值查询-Range Minimum Query). 我们开一个数组数组\(f[maxn][maxn\log_2]\)来储存数据. 定义 ...

  8. NetworkX系列教程(10)-算法之一:最短路径问题

    小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...

  9. 基于Dijsktra算法的最短路径求解

    基于Dijsktra算法的最短路径求解   描述 一张地图包括n个城市,假设城市间有m条路径(有向图),每条路径的长度已知.给定地图的一个起点城市和终点城市,利用Dijsktra算法求出起点到终点之间 ...

随机推荐

  1. react-native安装react-navigation后出现package-lock.json文件的坑

    npm5.0开始安装后回生成一个新的package-lock.json文件.以致初始化好的react-native项目引入的依赖被删除. 目前解决办法.使用facebook的yarn add 第三方组 ...

  2. c语言时间计算

    C语言使用time_t结构体表示时间戳,它本质上是个long类型. 我们可以使用如下函数获取当前时间的时间戳: time_t time(time_t* timer) 函数功能:得到从标准计时点(一般是 ...

  3. nginx 初探 之反向代理

    首先要解释的是什么叫做反向代理? 平时我们浏览网页可以输入网址直接访问,  但如果访问国外的网站,  可能就没那么简单('中国特色'),  这时候我们需要配置一个代理服务器, 然后通过此服务器中转来访 ...

  4. codevs 2488 绿豆蛙的归宿

    2488 绿豆蛙的归宿 http://codevs.cn/problem/2488/  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 黄金 Gold   题目描述 Descrip ...

  5. atcoder #082 E 暴力 计算几何

    给出点集,然后求一个凸包的所有的子凸包的贡献总和,贡献计算是凸包内部含边界上点的数量N,凸包的不包含边界的顶点数S,贡献为$2^{N-S}$ 首先很容易想到,凸包上包含内部的所有点构成的子凸包有Sum ...

  6. 对WebView进行的一些设置

    webView.getSettings().setJavaScriptEnabled(true); //使用setting WebSettings webSettings = webView.getS ...

  7. constant value too large

    出错现场: .model small .data byte_var dw dup(-, dup()) .stack .code 将byte_var dw 'abc',10h,2 dup(-1,2 du ...

  8. 重构改善既有代码设计--重构手法15:Remove Middle Man (移除中间人)

    某个类做了过多的简单委托动作.让客户直接调用受托类. 动机:在Hide Delegate (隐藏委托关系)的“动机”中,谈到了“封装委托对象”的好处.但是这层封装也是要付出代价的,它的代价是:每当客户 ...

  9. 如何用jQuery封装插件

    引子 现在网上关于js和jquery封装的插件很多,我刚刚接触前端的时候,就很敬佩那些自己写插件的大牛们!因为是他们给网站开发更多的便利,很多网页效果,网上很多现成的插件!那么这些插件是如何写的呢?首 ...

  10. NYOJ 257 郁闷的C小加(一) (字符串处理)

    题目链接 描述 我们熟悉的表达式如a+b.a+b(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2.同理,后缀表达式就是操作符 ...