Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ±¨¸æ(ÍêÕû°æ±¾)-
(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
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