C++代码,数据结构-关键路径

关键路径也不是很难理解很掌握,关键在于理解路径最长、最早发生、最迟发生这几个概念;

#include
#include
#include
using namespace std;
//图的邻接表的表示,算法 7.13 。 7.14 需要用到权
#define max_ver 20
struct Arcnode{
int adjvex; //该弧所指向顶点的位置
Arcnode *nextarc;
int info;
};

struct vnode{
char data;
Arcnode *firstarc;
};
typedef enum{dg,udg}Graphkind;//有向图,无向图
typedef vnode Adjlist[max_ver];

struct Mgraph{
Adjlist vertices;
int vexnum,arcnum;
Graphkind kind;
};

void createUDG(Mgraph &M){
M.kind=udg;
cout<<"请输入无向图的节点数和边数"<>M.vexnum>>M.arcnum;
cout<<"请输入无向图的顶点"<>(M.vertices)[i].data;  M.vertices[i].firstarc=NULL;}
cout<<"请一次输入各顶点的度以及其各边的信息"<>x;
    for(int j=0;j!=x;++j){
        Arcnode* tem=new Arcnode;
        cin>>tem->adjvex;
        cout<<"输入该弧的权"<>tem->info;
        cout<<"输入下条弧的头"<nextarc=M.vertices[i].firstarc;
        M.vertices[i].firstarc=tem;
    }
    if(i!=M.vexnum){
  cout<<"请输入下一个顶点的度"<nextarc){
    cout<adjvex<<" ";
}

cout<nextarc){
        ++indegree[p->adjvex];

    }
 }

}

bool Topologicalsort(Mgraph G){
findindgree(G,indegree);
stackst;
for(int i=0;i!=G.vexnum;++i){
    if(indegree[i]==0)st.push(i);
}
int counts=0;
while(!st.empty())
{
    int i=st.top();
    st.pop(); cout<nextarc){
        int k=p->adjvex;
        if((--indegree[k])==0){st.push(k);}
    }

}
if(counts&T){//利用改造过的拓扑算法,求事件最早发生的时间ve[G.vexnum]
findindgree(G,indegree);
for(int i=0;i!=G.vexnum;++i){ve[i]=0;}//初始化
int counts=0;
stackst;
for(int i=0;i!=G.vexnum;++i){
    if(indegree[i]==0)
        st.push(i);
}
while(!st.empty()){
    int j=st.top();
    st.pop();
    T.push(j);++counts;
    for(Arcnode *p=G.vertices[j].firstarc;p;p=p->nextarc){
        int k=p->adjvex;
        if(--indegree[k]==0)st.push(k);

        if((ve[j]+p->info)>ve[k])ve[k]=ve[j]+p->info;//最长路径



    }
}
if(countsT;
if(!Topologicalorder(G,T)){cout<<"wrong"<nextarc){
        int k=p->adjvex; int dut=p->info;
        if( (vl[k]-dut)nextarc){
            int k=p->adjvex;int dut=p->info;
            int ee=ve[j]; int el=vl[k]-dut;
            if(ee==el){cout<
"rebuf.txt"
9 11
a b c d e f g h i
3
1 6
2 4
3 5



4 1



4 1


1
5 2



6 9
7 7


1
7 4


1
8 2


1
8 4


0



运行结果,a b e g h


你可能感兴趣的:(数据结构与算法(严蔚敏版))