爬山搜索法c语言代码,搜索算法--爬山法 (代码示例)

标签:

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

//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; }

}

}

}

标签:

来源: https://blog.csdn.net/huang123307/article/details/82986910

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值