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. 【VSCode】Windows下VSCode编译调试c/c++【更新 2018.03.27】

    --------– 2018.03.27 更新--------- 便携版已更新,点此获取便携版 已知BUG:中文目录无法正常调试 用于cpptools 0.15.0插件的配置文件更新 新的launch ...

  2. 3.redis设计与实现--字典

    1.包括三个结构体:字典结构体+哈希表结构体+哈希节点结构体 2.如何解决哈希冲突? 答:redis使用的是链地址法来解决哈希冲突的,每个链表节点有一个next指针,最新加入的节点会放在链表的头部. ...

  3. Emacs ^ Vim

    Emacs存活: http://files.cnblogs.com/files/TheRoadToTheGold/Emacs%E2%80%94%E2%80%94%E5%AD%98%E6%B4%BB.z ...

  4. 维护后面的position sg函数概念,离线+线段 bzoj 3339

    3339: Rmq Problem Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1160  Solved: 596[Submit][Status][ ...

  5. 还不会做! 树上的gcd 树分治 UOJ33

    题目链接:http://uoj.ac/problem/33 题解链接:http://vfleaking.blog.uoj.ac/blog/38 现在感觉到了做OI的层层递进的思路的伟大之处,作为一个大 ...

  6. 字符串:SAM

    HDU4622:区间查询不同子串个数 用后缀自动机预处理出所有区间的不同子串个数 建立n次后缀自动机 #include <stdio.h> #include <string.h> ...

  7. Atcoder #014 agc014_C BFS

    LINK 题意:给定起点和最大操作次数$k$,地图'#'为上锁房间, 每次可以走$k$步,并任意解锁$k$个房间,问到达地图边界的最小次数. 思路:其实上锁与否并没有关系,因为先把$k$步走的次数用完 ...

  8. LightOJ 1017 - Brush (III) 记忆化搜索+细节

    http://www.lightoj.com/volume_showproblem.php?problem=1017 题意:给出刷子的宽和最多横扫次数,问被扫除最多的点是多少个. 思路:状态设计DP[ ...

  9. Uploadify & jQuery.imgAreaSelect 插件实现图片上传裁剪

    在网站中需要一个图片上传裁剪的功能,借鉴这篇文章 Ajax+PHP+jQuery图片截图上传 的指点,找到了jquery.imgAreaSelect这个不错插件,能对图片进行自定义区域选择并给出坐标, ...

  10. laravel前台html代码不显示

    后天向前台传输变量,如果能取到变量数据,还有代码,但是不显示图片 可以把{{}}换成{!!     !!}试试.