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. 「Django」rest_framework学习系列-路由

    自动生成4个url路由:from rest_framework import routersrouter = routers.DefaultRouter()router.register(r'wrx' ...

  2. 前端PHP入门-029-文件操作-掌握级别

    人生只有三天,活在昨天的人迷惑:活在明天的人等待:活在今天的人最踏实.你永远无法预测意外和明天哪个来得更早,所以,我们能做的,就是尽最大的努力过好今天.请记住:今天永远是昨天死去的人所期待的明天. f ...

  3. time_t与GMT格式互转

    time_t Time::timeFromGMT(string gmt) { char week[4]; memset(week,0,4); char month[4]; memset(month,0 ...

  4. 怎样把一个DIV放到另一个div右下角

    怎样把一个DIV放到另一个div右下角??? 借助CSS定位来实现,你将右下角的那个DIV放在另一个DIV里面,参考代码如下示: <div id="box1"> < ...

  5. 边双连通缩点+树dp 2015 ACM Arabella Collegiate Programming Contest的Gym - 100676H

    http://codeforces.com/gym/100676/attachments 题目大意: 有n个城市,有m条路,每条路都有边长,如果某几个城市的路能组成一个环,那么在环中的这些城市就有传送 ...

  6. HDU 2619 完全剩余类 原根

    求有多少$i(<=n-1)$,使 $x^i  \mod n$的值为$[1,n-1]$,其实也就是满足完全剩余类的原根数量.之前好像在二次剩余的讲义PPT里看到这个过. 直接有个定理,如果模k下有 ...

  7. iframe子夜页面调父页面的方法 取父页面的值

    1.调父页面的方法的写法 window.parent.yincang();//yincang()是父页面的一个方法 2.取父页面的值的写法 window.parent.document.gettEle ...

  8. HDU 2319 Card Trick (模拟)

    题目链接 Problem Description The magician shuffles a small pack of cards, holds it face down and perform ...

  9. Android SDK的安装与环境变量的配置

    配置Andriod环境变量前提是要先安装好JAVA环境 1.下载Android SDK,点击安装,放在任意不含空格.特殊符号和中文的路径即可. 2.默认路径安装后,安装完成,开始配置环境变量. 3.打 ...

  10. 超级ping(多线程版)

    发现学校公共wifi的ip段是10.1.0-255.0-255段的,还是之前的思路批量ping一波. 其实可以使用nmap的.但是脚本写都写了.是吧.你懂的. #!/usr/bin/env pytho ...