• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            The Fourth Dimension Space

            枯葉北風(fēng)寒,忽然年以殘,念往昔,語(yǔ)默心酸。二十光陰無(wú)一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢(mèng)令

            張宏數(shù)據(jù)結(jié)構(gòu)作業(yè)之-AOE網(wǎng)關(guān)鍵路徑(Activity On Edge)

             

            #include<iostream>
            #include
            <cmath>
            #include
            <algorithm>
            #include
            <stack>
            #include
            <fstream>
            using namespace std;
            #define MAX 100000

            struct node
            {
                
            int v;
                
            int w;
                node 
            *next;
            }
            ;

            node adj[MAX];
            node reversed_adj[MAX];
            int indegree[MAX];
            int ve[MAX];
            int vl[MAX];

            void initial(int n)
            {
                
            int i;
                
            for(i=1;i<=n;i++)
                
            {
                    adj[i].v
            =i;
                    adj[i].w
            =-1;
                    reversed_adj[i].v
            =i;
                    reversed_adj[i].w
            =-1;
                    adj[i].next
            =NULL;
                    reversed_adj[i].next
            =NULL;
                }

            }


            void findindegree(node adj[],int n)
            {
                
            int i;
                
            for(i=1;i<=n;i++)
                    indegree[i]
            =0;
                
            for(i=1;i<=n;i++)
                
            {
                    node 
            *p=adj[i].next;
                    
            while(p!=NULL)
                    
            {
                        indegree[p
            ->v]++;
                        p
            =p->next;
                    }

                }

            }



            void creat(node adj[],node reversed_adj[],int n)
            {
                fstream file(
            "test.txt");
                
            int i;
                cout
            <<"您將建立一個(gè)具有"<<n<<"個(gè)頂點(diǎn)的鄰接表,請(qǐng)依次輸入邊和權(quán)值,并以0 0 0結(jié)束"<<endl;
                
            for(i=1;;i++)
                
            {

                    
            int a,b,c;
                    printf(
            "請(qǐng)輸入第%d條邊以及權(quán)值(u v w):",i);
                    file
            >>a>>b>>c;
                    cout
            <<endl;
                    
            if(a==0&&b==0&&c==0)
                        
            break;
                    node 
            *p;
                    node 
            *q;
                    
            /////////////////////
                    p=&adj[a];
                    q
            =new node;
                    q
            ->v=b;
                    q
            ->w=c;
                    q
            ->next=p->next;
                    p
            ->next=q;
                    
            ////////////////////
                    p=&reversed_adj[b];
                    q
            =new node;
                    q
            ->v=a;
                    q
            ->w=c;
                    q
            ->next=p->next;
                    p
            ->next=q;
                    
            ///////////////////
                }


            }



            void topsort(node adj[],int n,int v[],int x)
            {
                
            int i;
                node 
            *p;
                stack
            <int>mystack;
                
            while(!mystack.empty())
                    mystack.pop();
                findindegree(adj,n);
                
            for(i=1;i<=n;i++)
                    v[i]
            =x;
                
            for(i=1;i<=n;i++)
                
            {
                    
            if(indegree[i]==0)
                    
            {

                        mystack.push(i);
                    }

                }

                
            ////////////////////////////
                while(mystack.size()!=0)
                
            {

                    i
            =mystack.top();
                    mystack.pop();
                    
            for(p=adj[i].next;p!=NULL;p=p->next)
                    
            {

                        indegree[p
            ->v]--;
                        
            if(indegree[p->v]==0)
                            mystack.push(p
            ->v);
                        
            if(x==0)
                        
            {
                            
            if(v[i]+p->w  >  v[p->v])
                            
            {

                                v[p
            ->v]=v[i]+p->w;
                            }

                        }

                        
            else
                        
            {
                            
            if(v[i]-p->w  <  v[p->v])
                                v[p
            ->v]=v[i]-p->w;
                        }
               

                    }

                }

            }



            void printedg(node adj[],int n,int ve[],int vl[])
            {
                
            int i;
                node 
            *p;
                
            int k;
                
            int e;
                
            int l;

                
            for(i=1;i<=n;i++)
                
            {
                    p
            =adj[i].next;
                    
            while(p!=NULL)
                    

                        k
            =p->v;
                        e
            =ve[i];
                        l
            =vl[k]-p->w;
                        cout
            <<i<<' '<<k<<' '<<e<<' '<<l;
                        
            if(e==l) cout<<"*";
                        cout
            <<endl;
                        p
            =p->next;
                    }
            //while
                }
            //for

            }




            int main ()
            {
                
            int n;
                cout
            <<"請(qǐng)輸入頂點(diǎn)數(shù)n:";
                cin
            >>n;
                initial(n);
                creat(adj,reversed_adj,n);
            //建立鄰接表和逆鄰接表
                topsort(adj,n,ve,0);
                topsort(reversed_adj,n,vl,ve[n]);
                printedg(adj,n,ve,vl);
                system(
            "pause");
                
            return 0;

            }



            為了驗(yàn)證程序的正確性,故做以下測(cè)試:

            輸入部分為:

            輸出部分為:

            其中前兩個(gè)數(shù)代表兩個(gè)頂點(diǎn)之間的通路,后兩個(gè)數(shù)分別代表最早開(kāi)始時(shí)間和最遲開(kāi)始時(shí)間 帶有*的通路組成關(guān)鍵路徑;

            思考:在做這個(gè)的時(shí)候,我突然覺(jué)得拓?fù)渑判蚝蛦卧疃搪泛孟裼心撤N相似,究竟是不是這樣呢?希望網(wǎng)路上的朋友能幫我解答這個(gè)問(wèn)題。多謝!

            posted on 2009-04-14 18:55 abilitytao 閱讀(2625) 評(píng)論(3)  編輯 收藏 引用

            評(píng)論

            # re: 張宏數(shù)據(jù)結(jié)構(gòu)作業(yè)之-AOE網(wǎng)關(guān)鍵路徑(Activity On Edge) 2009-04-15 12:30 brightcoder

            最短路是BFS,拓?fù)涫荄FS  回復(fù)  更多評(píng)論   

            # re: 張宏數(shù)據(jù)結(jié)構(gòu)作業(yè)之-AOE網(wǎng)關(guān)鍵路徑(Activity On Edge) 2010-03-06 10:29 吳偉斌

            你的代碼怎么運(yùn)行時(shí)內(nèi)存老是異常啊   回復(fù)  更多評(píng)論   

            # re: 張宏數(shù)據(jù)結(jié)構(gòu)作業(yè)之-AOE網(wǎng)關(guān)鍵路徑(Activity On Edge) 2010-03-13 00:29 abilitytao

            @吳偉斌
            真的?能給個(gè)截圖么?  回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            99久久免费国产特黄| 亚洲欧美成人久久综合中文网 | 亚洲伊人久久成综合人影院| 一本大道久久香蕉成人网| 久久天天躁夜夜躁狠狠| 日本欧美久久久久免费播放网| 精品久久久久久亚洲| 久久涩综合| 久久久久久久久久久久中文字幕| 久久亚洲国产精品一区二区| 欧美久久天天综合香蕉伊| 久久99国产综合精品免费| 国产精品久久久天天影视香蕉| 一级做a爰片久久毛片免费陪| 国内精品久久久久影院优| 狠狠色综合久久久久尤物| 久久久久久精品久久久久| 精品久久久久久国产| 一本久久免费视频| 国产精品久久影院| 久久国产AVJUST麻豆| 久久夜色精品国产亚洲| 热99RE久久精品这里都是精品免费 | 久久亚洲日韩精品一区二区三区| 一本色道久久88加勒比—综合| 99久久国产精品免费一区二区| 四虎国产精品免费久久5151| 久久久www免费人成精品| 久久激情亚洲精品无码?V| 久久久一本精品99久久精品88| 欧美午夜精品久久久久久浪潮| 国产精品久久久久影院色| 伊人久久大香线蕉AV色婷婷色| 久久久久免费精品国产| 亚洲国产精品高清久久久| 性做久久久久久免费观看| 91久久九九无码成人网站| AV无码久久久久不卡网站下载| 伊人久久无码中文字幕| 尹人香蕉久久99天天拍| 久久精品一区二区影院|