求最短路程

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static List<(string lujin, int length)> GroupLuXian = new List<(string lujin, int length)>();
        static List<List<(char dian, int length)>> luxian = new List<List<(char dian, int length)>>();
        static void Main(string[] args)
        {
            //使用数组保存这些点之间的关系 按A-E排序

            luxian.Add(new List<(char dian, int length)>
            {
    (‘B‘,6),(‘C‘,8)
         });//a
            luxian.Add(new List<(char dian, int length)>
            {
         (‘A‘,6),(‘D‘,3),(‘E‘,4)
            });//b
            luxian.Add(new List<(char dian, int length)>
            {
         (‘A‘,8),(‘F‘,4),(‘D‘,4)
            });//c
            luxian.Add(new List<(char dian, int length)>
            {
         (‘B‘,3),(‘C‘,4),(‘E‘,5)
            });//d
            luxian.Add(new List<(char dian, int length)>
            {
         (‘B‘,4),(‘G‘,7),(‘D‘,5)
            });//e
            luxian.Add(new List<(char dian, int length)>
            {
         (‘D‘,4),(‘G‘,4),(‘C‘,4)
            });//f
            luxian.Add(new List<(char dian, int length)>
            {
         (‘F‘,4),(‘E‘,7)
            });//g
               //数据构建完成 开始计算
            Stopwatch watch = new Stopwatch();
            watch.Start();
            GetLength(luxian[0], 0, "A");
            watch.Stop();

            Console.WriteLine("最短路长度为:"+GroupLuXian.OrderBy(u=>u.length).First().length+"消耗时间:"+watch.Elapsed);
            foreach (var item in GroupLuXian)
            {
                Console.WriteLine(item.lujin+"长度"+item.length);
            }
            Console.Read();

        }
        public static int GetIndex(char c)
        {
            switch (c)
            {
                case ‘A‘: return 0;
                case ‘B‘: return 1;
                case ‘C‘: return 2;
                case ‘D‘: return 3;
                case ‘E‘: return 4;
                case ‘F‘: return 5;
                case ‘G‘: return 6;

            }
            return -1;

        }
        public static void GetLength(List<(char dian, int length)> dian, int length, string lujin)
        {
            if (dian == null || dian.Count == 0)
                return;
            for (int i = 0; i < dian.Count; i++)
            {
                //判断是否包含终点
                if (lujin.Contains(dian[i].dian))
                    continue;
                if (dian[i].dian == ‘G‘)
                    GroupLuXian.Add((lujin + ‘G‘, length + dian[i].length));
                else
                    GetLength(luxian[GetIndex(dian[i].dian)], length + dian[i].length, lujin + dian[i].dian);
            }

        }

    }

}

  

时间: 2024-08-25 03:19:44

求最短路程的相关文章

HDU 1242 Rescue(求最短时间救出同伴,BFS+DP)

Rescue Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and G

CF 427D Match &amp; Catch 求最短唯一连续LCS

题目来源:CF 427D Match & Catch 题意:给出2个字符串 求最短的连续的公共字符串 并且该字符串在原串中只出现一次 思路:把2个字符串合并起来求height 后缀数组height的应用 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 100010; char s[maxn]; int sa[maxn];

8.24 求最短通路值

[题目]: 用一个整型矩阵matrix表示一个网络,1代表有路,0代表无路,每一个位置只要不越界,都有上下左右4个方向,求从最左上角到最右下角的最短通路值 例如,matrix为: 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1 0 0 0 0 1 通路只有一条,由12个1构成,所以返回12 题目来源:左程云老师<程序员代码面试指南> 原文地址:https://www.cnblogs.com/latup/p/10205035.html

A*算法在求最短路上的应用

在学习A*算法之前,首先回忆一下一个非常经典的单源最短路算法Dijkstra 1)维护一个表dist,储存当前求出的各点到S的距离 2)取出dist表中的最小值(显然这个过程是可以用堆优化的),并用该最小值对其他各点的dist值做松弛更新 3)重复2)过程,直到取出的最小值对应节点为T 这里其实无形中也用到了接下来即将讲到的open表和close表的概念 open表储存的是待扩展的点,一定程度上对应Dijkstra中的list close表中储存的是已经扩展过的点,以防出现重复 那么接下来谈谈A

poj 2406 求最短重复字串

题解: KMP中next数组的巧妙运用.在这里我们假设这个字符串的长度是len,那么如果len可以被len-next[len]整除的话,我们就可以说len-next[len]就是那个最短子串的长度为什么呢? 假设我们有一个字符串ababab,那么next[6]=4对吧,由于next的性质是,匹配失败后,下一个能继续进行匹配的位置,也就是说,把字符串的前四个字母,abab,平移2个单位,这个abab一定与原串的abab重合(否则就不满足失败函数的性质),这说明了什么呢,由于字符串进行了整体平移,而

hdu1372 BFS求最短路径长度

C - 广搜 基础 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the

生日礼物 HYSBZ - 1293 【单调队列】【求最短区间的长度,区间需要满足包含所有颜色种类】

生日礼物 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差. Input 第一行包含两个整数N, K,分别表

过桥问题,求最短时间

小明一家5口人在夜晚过一座桥,小明过桥要1分钟,小明的弟弟过桥要3分钟,小明的爸爸过桥要6分钟,小明的妈妈过桥要8分钟,小明的爷爷过桥要12分钟:这座桥每次只能过2个人,因是夜晚,过桥时必须提着灯,小明有一只灯,点燃后30分钟会熄灭,问怎么样安排,才能保证小明一家在灯熄灭前过桥. 写了一个PHP程序解决这类问题.有问题,欢迎指出. <?php /* 过桥问题 */ main(); function main(){ $arr=array(3,1,12,8,6); print bridge($arr

poj 3013 Big Christmas Tree (dij+优先级队列优化 求最短)

模板 意甲冠军:给你一个图,1始终根,每一方都有单价值,每个点都有权重新. 每个边缘的价格值 = sum(后继结点重)*单价方值. 最低价格要求树值,它构成了一棵树n-1条边的最小价值. 算法: 1.由于每一个边的价值都要乘以后来訪问的节点的权重.而走到后来訪问的点必经过这条边. 实际上总价值就是  到每一个点的最短路径*这个点的权重. 2.可是这个题 数据量真的太大了.50000个点,50000条边. 写普通的dij算法tle. 必须加优先队列优化- - 据说spfa也能过.可是spfa算法不