taskList

来源:互联网 发布:nvidia控制面板优化 编辑:程序博客网 时间:2024/05/17 04:42

#include <iostream>

using namespace std;

#define RETURN_ERROR 0
#define RETURN_OK    1

typedef struct tasknode
{
 unsigned int NO;
 unsigned int weight;
 unsigned int preNode[11];
 unsigned int nxtNode[11];
}TaskNode;

TaskNode g_taskNet[101];
unsigned int g_forWard[101];
unsigned int g_bakWard[101];

void initialNet()
{
 int i;
 for (i = 0; i <= 100; i++)
 {
  g_forWard[i] = 0;
  g_bakWard[i] = 0;
 }
 for (i = 0; i <= 10; i++)
 {
  g_taskNet->preNode[i] = 0;
  g_taskNet->nxtNode[i] = 0;
 }
 return;
}

void initialTaskNode(TaskNode* taskNode,
      unsigned int NO,
      unsigned int weight,
      unsigned int preNo,
      unsigned int nxtNo)
{
 unsigned int NxtFlag;
 unsigned int PreFlag;

 taskNode->NO = NO;
 taskNode->weight = weight;
 taskNode->preNode[0]++;
 taskNode->nxtNode[0]++;

 PreFlag = taskNode->preNode[0];
 NxtFlag = taskNode->nxtNode[0];

 taskNode->preNode[PreFlag] = preNo;
 taskNode->nxtNode[NxtFlag] = nxtNo;
}

void findNodeIterater(unsigned int NO)
{
 int i;
 unsigned int weightSum = 0;

 for (int i = 0; i < g_taskNet[NO].nxtNode[0]; i++)
 {
  weightSum += g_taskNet[NO].nxtNode[i];
 }
 g_taskNet[NO].weight = weightSum;

 if (0 == g_taskNet[NO].preNode[0])
 {
  return;
 }
 else
 {
  for (int i = 0; i < g_taskNet[NO].preNode[0]; i++)
  {
   findNodeIterater(g_taskNet[NO].preNode[i]);
  }
 }
}

int insertNodeandUpdateNet(unsigned int NO,
         unsigned int weight,
         unsigned int preNo,
         unsigned int nxtNo)
{
 unsigned int PretoNxtFlag;
 unsigned int NxttoPreFlag;

 if(0 != g_taskNet[NO].NO)
 {
  return RETURN_ERROR;
 }

 initialTaskNode(&g_taskNet[NO], NO, weight, preNo, nxtNo);

 PretoNxtFlag = g_taskNet[preNo].nxtNode[0];
 NxttoPreFlag = g_taskNet[preNo].preNode[0];

 g_taskNet[preNo].nxtNode[PretoNxtFlag] = NO;
 g_taskNet[nxtNo].preNode[NxttoPreFlag] = NO;

 //update
 findNodeIterater(NO);
}

int deleteNodeandUpdateNet(unsigned int NO)
{
 int pre, nxt, preFlag;
 unsigned int preNo;
 unsigned int nxtNo;
 unsigned int preNodeNum;
 unsigned int nxtNodeNum;
 unsigned int tmpArray[11];

 preNodeNum = g_taskNet[NO].preNode[0];
 nxtNodeNum = g_taskNet[NO].nxtNode[0];

 for (pre = 1; pre <= preNodeNum; pre++)
 {
  preNo = g_taskNet[NO].preNode[0];
  preFlag = g_taskNet[preNo].nxtNode[0];
  for (nxt = 1; nxt <= nxtNodeNum; nxt++)
  {
   nxtNo = g_taskNet[NO].nxtNode[nxt];
   g_taskNet[preNo].nxtNode[++preFlag] = nxtNo;
   g_taskNet[preNo].nxtNode[0]++;
  }
  tmpArray[pre] = preNo;
 }

 //update
 for (pre = 1; pre <= preNodeNum; pre++)
 {
  findNodeIterater(g_taskNet[NO].preNode[pre]);
 }
}

0 0
原创粉丝点击