算法导论-----图论-----图的表示 课后题答案

图的表示课后题答案

1.课后题22.1-1

给一个图的邻接表,计算出每个顶点的出度需要多长时间?计算出每个顶点的入度需要多长时间?

出度:O(V+E)

入度:O(VE)

2.课后题22-1-3

求图G=(V,E)的转置图G=(V,ET),也就是将图G中所有边反向

(1)矩阵O(V2)

for (i=1; i<=V; i++)

     for(j=i+1; j<=V; j++)

if(A[i][j] && !A[j][i])

{

A[i][j]=0;

A[j][i]=1;

}

(2)邻接表O(VE)

    Allocate V list pointers for GT (Adj'[])

for(i=1; i<=V, i++)

    for every vertex v in Adj[i]

    add vertex i to Adj'[v]

3.课后题22-1-4

给一个多重图的邻接表表示,给出一个O(V+E),的时间算法,来计算其等价无向图G`=(V,E`)的邻接表表示,多重边用一条边表示,去掉自环

(1)创建一个新的邻接表

(2)如果一个点Vi出现在Vj的链表中,把Vj拷贝到新的邻接表Vi中

(3)对所有的点重复(2)

(4)创建一个新的邻接表,和标记边数组

(5)对每个链表首节点进行检查,是否有自环,是否标记过这个边

(6)有自环消除

(7)对没有标记过的边进行标记,并且把点复制到新的邻接表中

4.课后题22-1-5

求一个图边的平方

矩阵O(V3)

For(i=1 to V)

    For(j=1 to V)

    {

        G2[i][j]=0;

        For(k=1 to V)

            If(g[i][k]==1 && g[k][j]==1)

            {

                G2[i][j]=1;break;

}

    }

邻接表(O(V3))

Procedure G-Square (V(G),E(G))

    V(G2)ßV(G)

    For each u 属于 V(G)

        For each v 属于 adj[u]

            For each w 属于 adj[v]

                E[G2]ß{(u,w)} 并 E[G2]

5.课后题22.1-6

给一个图的邻接矩阵,在O(V)的时间内,求一个图中通用的汇,即入度|V|-1,出度0

    

设第u个点为汇,即第u行全为0,第u列除第u行为0外其余全为1

如果第A[u][v]=1,u不可能是汇点;第A[u][v]=0;v不可能是汇点

算法:

Is-sink(A,k)

{

    Let A be |V|*|V|

    For jß1 to |V|

        Do if akj=1 //检查第k行从1到n列是否有1,也就是是否有出度

            Then return false

    For iß1 to |V| //检查第k列从1到n行(非k行)是否有0,也就是是否无入度

        Do if akj=0 and i!=k

            Then return false

Return true

}

 

UNIVERSAL-SINK(A)

    Let A be |A|*|A|

    i=j=1;

    while i<=|V| && j<=|V|

        do if aij=1

            then ißi+1

            else jßj+1

    sß0

    if i>|V|

        then return "there is no universal sink"

    else if is-sink(A,i)==false

        then return "there is no universal sink"

    else then return i "is universal sink"

 

6. 课后习题22.1-7和22.1-8不会,还望牛人指点

posted on 2012-04-16 19:46  Inpeace7  阅读(1000)  评论(0编辑  收藏  举报

导航