using System;
using System.Collections.Generic;
namespace 零件加工_最优加工顺序
{
//零件 T1、T2分别表示在两台加工机器上需要的时间
class Node
{
public int T1 { get; set; }
public int T2 { get; set; }
public Node(int t1, int t2)
{
T1 = t1;
T2 = t2;
}
}
class Program
{
public static int Count = 6; //需要加工的零件数量
public static List<Node> Nodes = new List<Node>(); //零件集合
public static int TBest = 999999; //最优加工的时间
public static int TOne = 0; //机器一加工的时间
public static int TTwo = 0; //机器二加工的时间
public static int[] X = new int[Count]; //加工顺序
public static int[] BestX = new int[Count]; //最优加工顺序
static void Main(string[] args)
{
for (int i = 0; i < Count; i++)
X[i] = i;
Nodes.Add(new Node(5, 7));
Nodes.Add(new Node(1, 2));
Nodes.Add(new Node(8, 2));
Nodes.Add(new Node(5, 4));
Nodes.Add(new Node(3, 7));
Nodes.Add(new Node(4, 4));
BackTrack(0);
Console.Write("最优加工顺序为:");
foreach(var v in BestX)
Console.Write((v+1)+" ");
Console.WriteLine();
Console.WriteLine("最优加工时间为:"+TBest);
Console.ReadKey();
}
static void BackTrack(int t)
{
if (t >= Count) //表示已经得到一个解
{
for (int i = 0; i < Count; i++)
BestX[i] = X[i];
TBest = TTwo;
return;
}
else
{
for (int i = t; i < Count; i++)
{
TOne += Nodes[X[i]].T1;
int temp = TTwo;
TTwo = Math.Max(TOne, TTwo) + Nodes[X[i]].T2;
if (TTwo < TBest)
{
int flag = X[t];
X[t] = X[i];
X[i] = flag;
BackTrack(t + 1);
flag = X[t];
X[t] = X[i];
X[i] = flag;
}
TOne -= Nodes[X[i]].T1;
TTwo = temp;
}
}
}
}
}
回溯类——零件加工_最优加工顺序
最新推荐文章于 2023-08-19 14:57:30 发布