7.图论
7.1概念:①网(路径带权的图)、子图;
②完全图、稀疏图、稠密图;
③邻接点、度、入度、出度;
④路径、路径长度、简单路径、简单回路;
⑤连通图、连通分量、强连通图、强连通分量;
⑥生成树、生成森林;
7.2存储结构:邻接矩阵、邻接表、十字链表、邻接多重表;
//-------存储结构(邻接矩阵)-------
#define MAXSIZE 100
typedef struct{
Vertex vexs[MAXSIZE];
int arcs[MAXSIZE][MAXSIZE];
int vexnum,arcsnum;
int kind;//图的种类
}MGraph;
//------存储结构(邻接表)---------
typedef struct ArcNode{
int vex;
struct ArcNode *link;
InfoType *info;//枚举变量
}ArcNode;
typedef struct VNode{
vertexType data;
ArcNode *firstarc;
}VNode;
typedef struct{
VNode arc[MAXSIZE];
int vexnum,arcnum;
int kind;
}Graphs;
7.3基本算法:
//------DFS(邻接表)------------
bool visited[MAXSIZE];
void DFSTraverse(Graphs G)
{
int v;
for(v=0;v<G.vexnum;++v)
visited[v]=false;
for(v=0;v<G.vexnum;++v)
if(!visited[v]) DFS(G,v);
return;
}
void DFS(Graphs G,int v)
{
ArcNode p;
visited[v]=true;visite(v);
for(p=G.arc[v].firstarc;p;p=p->link)
{
int w=p->vex;
if(visited[w]) DFS(G,w);
}
return;
}
//--------BFS(邻接表)---------
void BFSTraverse(Graphs G)
{
intv;
for(v=0;v<G.vexnum;++v)
visited[v]=false;
for(v=0;v<G.vexnum;++v)
if(!visited[v]) BFS(G,v);
return;
}
void BFS(Graphs G, int v)
{
int q[MAXSIZE];
ArcNode p;
int r=f=0;
visited[v]=true;visit(v);
q[r++]=v;
while(r!=f)
{
int w=q[f++];
for(p=G.arc[v].firstarc;p;p=p->link)
{
int k=p->vex;
if(!visited[k])
{
visited[k]=true;
visite(k);
q[r++]=k;
}
}
}
return;
}
//------AOE拓扑排序(邻接表)--------
int topsort(Graphs T)
{
int q[MAXSIZE],count,r=f=0;
ArcNode p;
int u,v;
for(v=0;v<T.vexnum;v++)
T.arc[v].id=0; //增设id项,记录每结点入度数
for(v=0;v<T.vexnum;v++)
for(p=T.arc[v].firstarc;p;p=p->link)
{
u=p->vex;
T.arc[u].id++;
}
while(r!=f)
{
v=q[r++];visit(v);
count++;
for(p=T.arc[v].firstarc;p;p=p->link)
{
u=p->vex;
T.arcs[u].id--;
if(!T.arc[u].id)
q[f++]=u;
}
}
if(count<T.vexnum) return 0;//存在回路
else return 1
}
7.4其它算法:最小生成树(Prim、Kruskal)、单源最短路径(Dijkstra)、每对顶点最短路径(Floyd)
7.5 AOV网(关键路径)
事件的最早发生时间:ve[k]=max{ve[j]+dut(<j,k>)};//dut(<j,k>):事件j到k的活动时间
事件的最晚发生时间:vl[i]=min{vl[k]-dut(<i,k>)};
活动的最早发生时间:e[i]=ve[j];
活动的最晚开始时间:l[i]=v[k]-dut(<j,k>);
每个活动允许延时的时间:l[i]-e[i];
则当l[i]=e[i]时,路径为关键路径。不是任何一个关键活动的提前完成,整个工程都能提前完成。