搜索算法--爬山法 (代码示例)

以航班为例,从出发城市到目标城市区域内各段最远的航班

//1.程序入口

        static void Main(string[] args)
        {
            Test.SampleOne sample = new Test.SampleOne();
            sample.Start(1, "北京", "深圳");
        }

//2.实现方法

using System;
using System.Collections.Generic;

namespace Test
{
    public class SampleOne
    {
        /// <summary>
        /// 航班
        /// </summary>
        private List<FlightInfo> flights = null;

        /// <summary>
        /// 航班数量
        /// </summary>
        private int numFlights = 0;

        private void InitData()
        {
            if (flights == null)
            {
                flights = new List<FlightInfo>();
                flights.Add(new FlightInfo("北京", "沈阳", 684));
                flights.Add(new FlightInfo("北京", "杭州", 1273));
                flights.Add(new FlightInfo("杭州", "武汉", 751));
                flights.Add(new FlightInfo("北京", "武汉", 1161));
                flights.Add(new FlightInfo("武汉", "深圳", 1069));
                flights.Add(new FlightInfo("沈阳", "深圳", 2792));

                numFlights = flights.Count;
            }
        }

        /// <summary>
        /// 寻找出发城市到目的地城市最远距离的航班
        /// </summary>
        /// <param name="i">寻找次数</param>
        /// <param name="from">出发城市</param>
        /// <param name="to">目的地城市</param>
        public void Start(int i, string from, string to)
        {
            //初始化数据
            InitData();

            FlightInfo f = Find(from);

            if (f == null)
            {
                Console.WriteLine("无此航班");
                Console.ReadKey();
            }
            Console.WriteLine("节点:{0},出发地:{1},目的地:{2},距离:{3}", i, f.From, f.To, f.Distance);

            if (f.To.Equals(to))
            {
                Console.WriteLine("已到达目的地。");
                return;
            }

            Start(++i, f.To, to);
            Console.ReadKey();
        }


        //找出离出发城市最远的航班
        private FlightInfo Find(string from)
        {
            int pos = -1;
            int dist = 0;
            for (int i = 0; i < numFlights; i++)
            {
                if (flights[i].From.Equals(from) && !flights[i].Skip)
                {
                    if (flights[i].Distance > dist)
                    {
                        pos = i;
                        dist = flights[i].Distance;
                    }
                }
            }

            if (pos != -1)
            {
                flights[pos].Skip = true;
                return new FlightInfo(flights[pos].From, flights[pos].To, flights[pos].Distance);
            }
            return null;
        }
    }

    /// <summary>
    /// 航班信息
    /// </summary>
    public class FlightInfo
    {
        private string from;
        private string to;
        private int distance;
        private bool skip;

        public FlightInfo(string strFrom, string strTo, int intDistance)
        {
            from = strFrom;
            to = strTo;
            distance = intDistance;
            skip = false;
        }

        /// <summary>
        /// 出发地
        /// </summary>
        public string From
        {
            get { return from; }
            set { from = value; }
        }

        /// <summary>
        /// 目的地
        /// </summary>
        public string To
        {
            get { return to; }
            set { to = value; }
        }

        /// <summary>
        /// 距离
        /// </summary>
        public int Distance
        {
            get { return distance; }
            set { distance = value; }
        }

        /// <summary>
        /// 是否跳跃忽略
        /// </summary>
        public bool Skip
        {
            get { return skip; }
            set { skip = value; }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/huang123307/article/details/82986910