Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ±¨¸æ(ÍêÕû°æ±¾)-
int i;
for(i=0;i
return 0; }
//ÍØÆËÅÅÐòͬʱÇó³ö¸÷»î¶¯µÄ×îÔç·¢Éúʱ¼ä
int ToPoOrder(ALGraph &G,Stack &T) {
int count=0;
int i,j,k; Stack S1; ArcNode *p;
int indegree[MAX_V_NUM]; InitStack(T); InitStack(S1);
FindInDegree(G,indegree); for(i=0;i for(i=0;i while(!StackEmpty(S1)) { Pop(S1,j); Push(T,j); count++; for(p=G.vertices[j].firstarc;p;p=p->nextarc) { k=p->adjvex; if(--indegree[k]==0) Push(S1,k); 17 / 33 Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ±¨¸æ(ÍêÕû°æ±¾)- if(ve[j]+(p->info)>ve[k]) ve[k]=ve[j]+(p->info); } } // for(i=0;i //¼ÆËã¸÷¶¥µãµÄ×î³Ù·¢Éúʱ¼ä¼°½øÐÐÊä³ö int CriticalPath(ALGraph &G) { int vl[MAX_V_NUM]; int dut; int i,j,k,ee,el; ArcNode *p; // char tag; if(!ToPoOrder(G,T)) return 0; cout<<\Íê³ÉÕûÏ³ÌÖÁÉÙÐèÒªµÄʱ¼äÊÇ£º\.vnum-1]< // for(i=0;i cout<<\Ó°Ï칤³Ì½ø¶ÈµÄ¹Ø¼ü»î¶¯ÊÇ:\ for(j=0;j 18 / 33 Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ±¨¸æ(ÍêÕû°æ±¾)- dut=(p->info); ee=ve[j]; el=vl[k]-dut; //cout<<\endl; if(ee==el) //tag=(ee=el)?'*':''; cout< int main() { ALGraph G; int i,j,Hnum; ArcNode *p,*q; // int indegree[MAX_V_NUM]; //ALGraph G; cout<<\ÇëÊäÈëͼÖеĶ¥µãÊýºÍ»¡ÊýÒÔ¼°Í¼µÄ±êÖ¾ºÍ»¡µÄ±êÖ¾£º\ cin>>G.vnum; cin>>G.arcnum; cin>>G.kind; cin>>G.kind1; cout<<\ÇëÍê³É¸ÃÁÚ½Ó±íµÄÊäÈ룺\ for(i=0;i { cout<<\ÇëÊäÈë¸Ã¶¥µãµÄÐÅÏ¢\ cin>>G.vertices[i].data; cout<<\ÇëÊäÈëÓë\.vertices[i].data<<\ºÅ¶¥µãÏàÁڵĻ¡µÄÊýÄ¿:\ cin>>Hnum; if(Hnum==0) { G.vertices[i].firstarc=0; } else { 19 / 33 Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ±¨¸æ(ÍêÕû°æ±¾)- cout<<\ÇëÒÀ´Î´ÎÊäÈ뻡µÄÐÅÏ¢£¨°üÀ¨¶¥µãµÄλÖü°È¨ÖµºÍ¸Ã±ßµÄÃû³Æ£©\ p=(ArcNode *)malloc(sizeof(ArcNode)); G.vertices[i].firstarc=p; p->nextarc=0; cin>>p->adjvex; cin>>p->info; cin>>p->name; for(j=0;j //ToPoOrder(G,T); //CriticalPath(G); ////////test////////// /* for(i=0;i // FindInDegree(G,indegree); //for(i=0;i // cout<<\ CriticalPath(G); ////////////test end/////////// return 0; } 20 / 33