Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ±¨¸æ£¨ÍêÕû°æ±¾£© ÏÂÔØ±¾ÎÄ

Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ±¨¸æ(ÍêÕû°æ±¾)-

(2)º¯Êý½Ó¿Ú˵Ã÷£º

º¯ÊýÖеIJÎÊý¾ùÊÇʹÓõÄÈ«¾Ö±äÁ¿µÄ´«µÝ£¬Òò¶øÔÚº¯Êý¼ä½øÐд«µÝµÄ¹ý³ÌÖбȽϼòµ¥£¬ÏÂÃæ¾Í½«Ö÷Òªº¯Êý¼°ËûÃÇÖ®¼äµÄ²ÎÊýµÄ¹ØÏµÁгöÈçÏ£º

int InitStack(Stack &S); int Push(Stack &S,int &e); int Pop(Stack &S,int &e); int CriticalPath(ALGraph &G);

int ToPoOrder(ALGraph &G,Stack &T);

int FindInDegree(ALGraph &G,int (&indegree)[MAX_V_NUM]); 2.3ÏêϸÉè¼Æ

¸Ã³ÌÐòµÄËã·¨Ö÷ÒªÔÚÒÔÏÂËĸö·½Ãæ£ºÍØÆËÅÅÐò¡¢Çó³öʼþµÄ×îÔç·¢Éúʱ¼ä¡¢Çó³öʼþµÄ×î³Ù·¢Éúʱ¼ä¡¢Çó³ö¹Ø¼ü»î¶¯£¬ÆäÖйؼü»î¶¯µÄËã·¨Éè¼Æ½ÏΪ¼òµ¥£¬¼´ÊÇÔÚÇó³ö¸÷»î¶¯µÄ×îÔç·¢Éúʱ¼äºÍ×î³Ù·¢Éúʱ¼äµÄǰÌáϸù¾ÝÅжÏÁ½Ê±¼äÊÇ·ñÏàµÈ£¬À´ÅжÏÊÇ·ñÊǹؼü»î¶¯£¬Òò¶øÖ÷ÒªµÄËã·¨Éè¼Æ±ãÔÚǰÈý¸ö·½Ãæ¡£

ÍØÆËÅÅÐòÓëÇóʼþµÄ×îÔç·¢Éúʱ¼äÏà½áºÏ£¬ÍØÆËÅÅÐò¼´½«Èë¶ÈΪÁãµÄÕ»SÖеÄÔªËØÒÀ´Î³öÕ»£¬Í¬Ê±½«¸ÃÔªËØ½øÕ»µ½Õ»TÖУ¬ÔÚ½øÕ»µÄͬʱÇó³öÆä×îÔç·¢Éúʱ¼äËã·¨ÈçÏ£º

´Óve£¨0£©=0¿ªÊ¼ÏòǰµÝÍÆ

Ve£¨j£©=Max{ve(i)?dut(?i,j?)}

È»ºó±ãÊÇÇóʼþµÄ×î³Ù·¢Éúʱ¼ä£¬¸Ã¹ý³Ì¾ÍÊǶÔÉÏÃæµÄ¹ý³ÌÖеõ½µÄÕ»T½øÐÐÒÀ´Î³öÕ»£¬Í¬Ê±ÇóÆä×î³Ù·¢Éúʱ¼ä£¬ÆäËã·¨¼òÒªÃèÊöÈçÏÂ:

´Óvl£¨n-1£©=ve£¨n-1£©ÆðÏòºóµÝÍÆ

Vl£¨i£©=Min{vl(j)?dut(?i,j?)}

¾ßÌåʵÏÖ¼û´úÂëÖÐint ToPoOrder(ALGraph &G,Stack &T)ºÍint CriticalPath(ALGraph &G)º¯Êý£»

3¡¢µ÷ÊÔ·ÖÎö

¸Ã³ÌÐòµÄµ÷ÊÔ¹ý³Ì½ÏΪÇáËÉ£¬»ù±¾ÔÚË㷨ʵÏֵĻù´¡ÉÏûÓгöÏÖʲô´íÎó£¬Òò¶øÔÚµ÷ÊԵĹý³ÌÖв¢ÎÞʲôÉî¿ÌÓ¡Ïó¡£

4¡¢Óû§ÊÖ²á

µã»÷ÔËÐгÌÐò£¬ÔÚµ¯³öµÄ´°¿ÚÖУ¬»áÌáʾҪÊäÈëµÄÐÅÏ¢£º 4¡¢ ÌáʾÐÅϢΪ£º¡°ÇëÊäÈëͼÖеĶ¥µãÊýºÍ»¡ÊýÒÔ¼°Í¼µÄ±êÖ¾ºÍ»¡

µÄ±êÖ¾£º¡±°´ÒªÇóÊäÈë¼´¿É£¬±¾Ìâ¼´ÊäÈë9 11 v a

5¡¢ ÌáʾÐÅϢΪ¡°ÇëÍê³É¸ÃÁÚ½Ó±íµÄÊäÈ롱£ºÓÉÓÚÁÚ½Ó±íµÄÊäÈëÐÅ

Ï¢Ò»°ã½Ï¶à£¬¶øÇÒ¾ùÊDzÉÓõÄÁ´±íÀ´´æ´¢£¬Òò¶ø¸Ã²¿·ÖµÄÊäÈëÒªÌØ±ðµÄСÐÄ

6¡¢ ÔÚÍê³ÉÉÏÃæÁ½²½µÄÊäÈëºó°´enter¼ü±ãÄܵõ½³ÌÐòµÄÔËÐнá

¹û£¬¼´Êä³öÍê³ÉÕûÏ³ÌÖÁÉÙÐèÒª¶àÉÙʱ¼äºÍÓ°Ï칤³Ì½ø¶ÈµÄ¹Ø¼ü»î¶¯

13 / 33

Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ±¨¸æ(ÍêÕû°æ±¾)-

5 ²âÊÔÊý¾Ý¼°²âÊÔ½á¹û

²âÊÔÊý¾ÝÈçÏ£º 9 11 v a 1 3 1 6 1 2 4 2 3 5 3 2 1 4 1 4 3 1 4 1 5 4 1 5 2 6 5 2 6 9 7 7 7 8 6 1 7 4 9 7 1

8 2 10 8 1

8 4 11 9 0

³ÌÐòÔËÐнá¹ûÈçÏ£º

6¡¢Ô­³ÌÐòÇåµ¥ÈçÏ£º /*

¹Ø¼ü·¾¶ÎÊÌâ

2010Äê07ÔÂ31ÈÕÍíÉÏ08£º36¿ªÊ¼¶¯¹¤

14 / 33

Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ±¨¸æ(ÍêÕû°æ±¾)-

*/

#include using namespace std;

const int MAX_V_NUM=20;//×î´ó´æ´¢¶¥µãµÄÊýÄ¿ const int STACK_INIT_SIZE=20;//Õ»µÄ´æ´¢¿Õ¼ä·ÖÅäÁ¿ ////Êý¾Ý´æ´¢²¿·Ö /*

Ò»ÏÂÊÇͼµÄÁÚ½Ó±íµÄ´æ´¢±íʾ£¬ÓÉÓÚµÚÒ»´ÎÓà ÓõıȽϵÄÉúÊè¡­¡­ */

typedef struct ArcNode {

int adjvex; //¸Ã»¡ËùÖ¸ÏòµÄ¶¥µãµÄλÖà struct ArcNode *nextarc;//Ö¸ÏÂÒ»Ìõ»¡µÄÖ¸Õë int info;//¸Ã»¡Ïà¹ØÐÅÏ¢ ¼´È¨Öµ int name;//»¡µÄÃû×Ö }ArcNode;

typedef struct VNode {

int data;//¶¥µãµÄÐÅÏ¢

ArcNode *firstarc;//Ö¸ÏòµÚÒ»ÌõÒÀ¸½¸Ã¶¥µãµÄ»¡µÄÖ¸Õë

}AdjList[MAX_V_NUM]; typedef struct {

AdjList vertices;

int vnum,arcnum;//ͼÖе±Ç°¶¥µãÊýºÍ»¡Êý char kind,kind1;//ͼÖеĸ÷Àà±êÖ¾¶¥µãºÍ»¡

}ALGraph; typedef struct {

int *base; int *top; int stacksize;

}Stack;

int ve[MAX_V_NUM];

Stack T;

//º¯ÊýÌåÃèÊö²¿·Ö

int InitStack(Stack &S);

15 / 33

Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ±¨¸æ(ÍêÕû°æ±¾)-

int Push(Stack &S,int &e); int Pop(Stack &S,int &e);

int CriticalPath(ALGraph &G);

int ToPoOrder(ALGraph &G,Stack &T);

int FindInDegree(ALGraph &G,int (&indegree)[MAX_V_NUM]); /*ÏÂÃæÊǺ¯ÊýµÄ¾ßÌåʵÏÖ²¿·Ö*/ //¹¹ÔìÒ»¸ö¿ÕÕ»

int InitStack(Stack &S) {

S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); if(!S.base) return 0; S.top=S.base;

S.stacksize=STACK_INIT_SIZE;//¿ÉÒÔÓÃÓÚµ±Õ»µÄ´æ´¢¿Õ¼ä²»¹»µÄÇé¿öÏ ½øÐÐÀ©³ä return 1; };

//ÔªËØ½øÕ»

int Push (Stack &S, int &e) {

*S.top++=e; return 1; };

//ÔªËØ³öÕ»

int Pop(Stack &S, int &e) {

if(S.top==S.base) return 0; e=*--S.top; return 1; };

//ÅжÏÕ»ÊÇ·ñΪ¿Õ

int StackEmpty(Stack &S) {

if(S.top==S.base) return 1; else return 0; };

//ÕÒ³öÿ¸ö¶¥µãµÄÈë¶È

int FindInDegree(ALGraph &G,int (&indegree)[MAX_V_NUM]) {

ArcNode *p;

16 / 33