逐至 2021-05-04 09:55 采纳率: 100%
浏览 114
已采纳

c#编程题,进链接看文本,留下代码,最好带下注释,感谢

链接: https://pan.baidu.com/s/1o0vrefFJxRnkWEidexVPtg

提取码: c5hr 

 

 

余额有限,采纳后会追加5块红包,感谢

  • 写回答

3条回答 默认 最新

  • 斯洛文尼亚旅游 2021-05-04 23:19
    关注

     

    using System;
    using System.Text.RegularExpressions;
    using System.Collections.Generic;
    using System.Linq;
    namespace ConsoleApp1
    {
        class PathInfo
        {
            public int step = 0;
            public int[] curPoint;
        }
        class Program
        {
            static void Main()
            {
                int cell = int.Parse(Console.ReadLine());
                int row = int.Parse(Console.ReadLine());
                var s = Console.ReadLine();
                var chrPoints = new Dictionary<char, List<int[]>>();
                for (var i = 0; i < row; i++)
                {
                    for (var j = 0; j < cell; j++)
                    {
                        var c = s[i * cell + j];
    
                        if (chrPoints.ContainsKey(c)) chrPoints[c].Add(new int[] { i, j });
                        else chrPoints[c] = new List<int[]>() { new int[] { i, j } };
                    }
                }
                var chrs = Regex.Replace(Console.ReadLine(), "[^" + s + "]", "", RegexOptions.Compiled);
                var paths = new List<PathInfo>();
                foreach (var c in chrs)
                {
                    var points = chrPoints[c];
                    if (paths.Count == 0)
                    {//第一个字符
                        foreach (var p in points)
                        {
                            paths.Add(new PathInfo { curPoint = p, step = p[0] + p[1] + 1 });
                        }
                    }
                    else
                    {
                        if (points.Count > 1)
                        {
                          
                            var newpath = new List<PathInfo>();
                            foreach (var p in points)
                            {
                                foreach (var _p in paths)
                                {
                                    var step =_p.step+ Math.Abs(_p.curPoint[0] - p[0]) + Math.Abs(_p.curPoint[1] - p[1]) + 1;
                                    newpath.Add(new PathInfo { curPoint = p,step=step });
                                }
                            }
                            paths = newpath.GroupBy(i => i.step).OrderBy(i => i.Key).First().ToList();
                        }
                        else
                        {//参考字符一个,和上次的路径直接求长度
                            foreach (var p in paths)
                            {
                                p.step += Math.Abs(p.curPoint[0] - points[0][0]) + Math.Abs(p.curPoint[1] - points[0][1]) + 1;
                                p.curPoint = points[0];
                            }
                        }
                    }
                   
                }
    
                Console.Write(paths.OrderBy(i => i.step).First().step );
    
            }
        }
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥60 Matlab联合CRUISE仿真编译dll文件报错
  • ¥15 脱敏项目合作,ner需求合作
  • ¥15 脱敏项目合作,ner需求合作
  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId