[100分]求解一个按照生成数组的问题
假如有如上的图,节点s和节点t表示起点和终点,
假设图中的其他节点表示一个工程中的若干个任务,
现在我们要为这若干个任务逐个分配一个权值,
当有如节点{1,2}决定哪个任务先执行时,如果给节点1的优先权11>节点2的优先权10,则节点1先执行.
可以看到图中的节点有先后顺序,如1执行之后3才可以执行,如何为这些节点分配优先权 能保证 先序节点的优先权>后续节点的优先权呢?
优先权:正整数,越大表示先执行,如图中有11个节点则最大的优先权为11,最小的为1
//仅仅是随机分配优先权,却不能保证先序节点优先权大
public int[] priorityEncode(int popNum)
{
GAGene gene = new GAGene(popNum);
//int[] gene = new int[popNum];
List<int> list = new List<int>();
Random r = new Random();
while (list.Count < popNum)
{
int num = r.Next(1, popNum + 1);
if (!list.Contains(num))
list.Add(num);
}
for (int i = 0; i < popNum; i++)
{
gene[i] = (int)list[i];
}
return gene;
}
或者可以对随机分配的优先权进行修补
--------------------编程问答-------------------- 图没有贴好 小了一些 重新发一下
上述问题一个可能的解是:
{10,11,7,9,3,8,5,4,6,2,1} --------------------编程问答-------------------- 如果对上图进行一次拓扑排序,重新分配一下节点的优先权是否可行呢? --------------------编程问答-------------------- 不是很明白楼主的意思,但是觉得拓扑排序可解。 --------------------编程问答-------------------- 最简单的来讲 就是为节点优先权赋值时保证 前序节点的优先权大于后续节点优先权 就行 --------------------编程问答-------------------- 上面的这些点是固定位置吗? --------------------编程问答-------------------- 在s和t点之间的这些点有什么规则 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 在s和t点之间的这些点没有什么规则 只是随机的数量
关于他们的前后顺序是已知的
补充:.NET技术 , C#