RSS
热门关键字:  数据挖掘  数据仓库  商业智能  人工智能  搜索引擎
当前位置 :| 首页>电脑常识>算法技术>

AOV工程网络图的计算

来源: 作者:unkonwn 时间:2006-03-27 点击:

下面是计算AOV工程网络图的C代码,符合ANSI标准,可用于大部分的编译器。 数据挖掘实验室


#include <stdio.h>
#include <string.h>
#include <stdlib.h> 数据挖掘研究院


#define MAX_V_NUM   1024   // 最大顶点数
#define WORD32    unsigned long
#define WORD32_BLEN   4
#define MAX_WORD32   0xffffffffL
#define INIT_AOV   memset( (void *)&g_aov, (char)0xff, (size_t)MAX_V_NUM * MAX_V_NUM * WORD32_BLEN )
#define IN_FILE_NAME  "aov.in"
#define ERR_FILE_NOT_FOUND 1
#define TRUE    1 数据挖掘实验室


WORD32 g_aov[MAX_V_NUM][MAX_V_NUM];
WORD32 g_e[MAX_V_NUM], g_l[MAX_V_NUM];
int g_n;


// 函数预定义 -- 开始
void input_init();
void calc_el();
void print_result();
// 函数预定义 -- 结束


void input_init()
{
 WORD32 i, j, k;
 FILE *fp_in; 数据挖掘研究院


 INIT_AOV;


 fp_in = fopen( IN_FILE_NAME, "r" );
 if ( fp_in == NULL )
 {
  printf("File not found! ");
  exit(ERR_FILE_NOT_FOUND);
 }
 fscanf( fp_in, "%d ", &g_n );
 while (TRUE)
 {
  fscanf( fp_in, "%lu %lu %lu", &i, &j, &k );
  if ( ( i == 0 ) && ( j == 0 ) && ( k == 0 ) ) break;
  g_aov[i - 1][j - 1] = k;
  fscanf( fp_in, " " );
 }
 fclose(fp_in); 数据挖掘研究院


 g_e[0] = 0;
}


void calc_el()
{
 WORD32 ext;
 int i, j;


 for ( i = 1; i < g_n; i++ )
 {
  ext = 0;
  for ( j = 0; j < g_n; j++ )
   if ( ( g_aov[j][i] != MAX_WORD32 ) && ( g_e[j] + g_aov[j][i] > ext ) )
    ext = g_e[j] + g_aov[j][i];
  g_e[i] = ext;
 }


 g_l[g_n - 1] = g_e[g_n - 1];
 for ( i = g_n - 2; i >= 0; i-- )
 {
  ext = MAX_WORD32;
  for ( j = 0; j < g_n; j++ )
   if ( ( g_aov[i][j] != MAX_WORD32 ) && ( g_l[j] - g_aov[i][j] < ext ) )
    ext = g_l[j] - g_aov[i][j];
  g_l[i] = ext;
 }
} 数据挖掘研究院


void print_result()
{
 int i, j;

数据挖掘实验室


 printf("  # E L ");
 for ( i = 0; i < g_n; i++ )
 {
  if ( g_e[i] == g_l[i] )
   printf("*");
  else
   printf(" ");
  printf( " %d %lu %lu ", i + 1, g_e[i], g_l[i] );
 }
 printf(" 关键路径: ");
 j = 0;
 while ( j != g_n - 1 )
 {
  printf( "%d - ", j + 1 );
  for ( i = 0; i < g_n; i++ )
  {
   if ( ( g_aov[j][i] != MAX_WORD32 ) && ( g_e[i] == g_l[i] ) )
   {
    j = i;
    break;
   }
  }
 }
 printf( "%d ", j + 1 );
}

数据挖掘研究院


int main(int argc,char *argv[])
{
 input_init();
 calc_el();
 print_result(); 数据挖掘实验室


 return 0;
} 数据挖掘研究院


输入文件aov.in的格式是这样的:

数据挖掘研究院


第一行:n,表示顶点数

数据挖掘研究院


后面每行表示一道工序


最后用0 0 0结束 数据挖掘实验室


事项1为起始事项,事项n为末事项。 数据挖掘研究院


输出中,有*的是关键路径上的点。 数据挖掘实验室

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?