庞茜丹

导航

第六章学习小结

思维导图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

练习题目注意点:

1.如果最短路径一共有10条边,而另一条路径虽然比最短路径长,但它只有一条边,如果图中所有路径的权值都加1,就会导致边少的路径可能会成为新的最短路径。

2.最小生成树VS最短路径:最小生成树只能说明整个路径是最小的,并不能说明树中单个结点的路径是最小的。

邻接表存储结构:

typedef struct ArcNode//边结点 
{
    int adjvex;//所指向的顶点的位置 
    struct ArcNode *nextarc;//指向下一条边的指针 
}ArcNode; 
typedef struct VNode//顶点结点 
{
    int data;//顶点的名称 
    ArcNode *firstarc;//该顶点的第一条边 
}VNode,AdjList[MAX];
typedef struct
{
    AdjList vertices;//AdjList是一个数组类型,所以vertice就是数组名了
    int vexnum,arcnum;
}ALGraph;//邻接表

邻接矩阵存储结构:

typedef struct
{
    int vexs[MAX];
    int arc[MAX][MAX];
    int vexnum,arcnum;
}AMGraph;

BFS:

//基于邻接表
void BFS_AL(ALGraph G,int i)
{
    cout<<i<<" ";
    visited_2[i]=true;
    
    int k;
    queue<int>Q;
    Q.push(i);
    
    while(!Q.empty())
    {
        k=Q.front();
        Q.pop();
        ArcNode *p=G.vertices[k].firstarc;
        for(int w=p->adjvex;p!=NULL;p=p->nextarc)
        {
            if(!visited_2[w])
            {
                cout<<w<<" ";
                visited_2[w]=true;
                Q.push(w);
            }
        }
    }
}
//基于邻接矩阵
void BFS_AM(AMGraph G,int i)
{
    cout<<i<<" ";
    visited_2[i]=1;
    queue<int> Q;
    Q.push(i);
    int k;
    while(!Q.empty())
    {
        k=Q.front();
        Q.pop();
        for(int i=0;i<G.vexnum;i++)
        {
            if(G.arc[i][k]==1&&visited_2[i]==0)
            {
                cout<<i<<" ";
                visited_2[i]=1;
                Q.push(i);
            }
        }
    }
    
}

目标:因为有不少大作业要提交,上期的目标完成的不太理想,每个图的应用的算法都是一个大工程,没有花很多心思去理清;下期需要合理安排时间,利用时间回顾知识,也要兼顾第7章。

posted on 2020-06-14 23:57  庞茜丹  阅读(287)  评论(0编辑  收藏  举报