以航班为例,从出发城市到目标城市区域内各段最远的航班
//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
{
///
/// 航班
///
private List flights = null;
///
/// 航班数量
///
private int numFlights = 0;
private void InitData()
{
if (flights == null)
{
flights = new List();
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;
}
}
///
/// 寻找出发城市到目的地城市最远距离的航班
///
/// 寻找次数
/// 出发城市
/// 目的地城市
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;
}
}
///
/// 航班信息
///
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;
}
///
/// 出发地
///
public string From
{
get { return from; }
set { from = value; }
}
///
/// 目的地
///
public string To
{
get { return to; }
set { to = value; }
}
///
/// 距离
///
public int Distance
{
get { return distance; }
set { distance = value; }
}
///
/// 是否跳跃忽略
///
public bool Skip
{
get { return skip; }
set { skip = value; }
}
}
}