学会了图的基本定义及相关的基本术语
图的存储结构:1.领接矩阵(不便与增加和删除顶点,统计边的树木,空间复杂度高)
2.邻接表(逆邻接表)(不便与判断顶点之间是否有边, 不便于计算有向图各个顶点的度)
深度优先搜索(DFS)算法
连通图
bool visited[MVNum] void DFS(Graph G, int v) { cout << v; visited[v]=true; for(w=ForstAdjvex(G,v); w>=0; w=NextAdjVex(G,v,w)) if(!visited[w]) DFS(G,w); }
如果是非连通图,则要加多一层:
void DFSTraverse(Graph G) { for(v=0; v<G.vexnum; v++) visited[v]=false;//访问标志数组初始化 for(v=0; v<G.vexnum; v++) if(!visited[v]) DFS(G,v); }
广度优先搜索(BFS)算法
连通图
void BFS(Graph G, int v) {//使用队列 cout << " "<<v; visited[v]=true; // InitQueue(Q); EnQueue(Q,v); while(!Q.empty()) { int u; DeQueue(Q,u); //队列元素出队并置为u for(int w=FirstAdjVex(l,u); w>=0; w=NextAdjVex(l,u,w)) { if(!visited[w]) { cout << " "<<w; visited[w]=true; EnQueue(Q,w); } } } }
如果是非连通图,也像DFS一样加多一层。
学会了如何创建最小生成树
普利姆算法(由点到边)书本P167页
克鲁斯卡尔算法(由边到点)书本P169
如果是同一算法,没有随机树什么的,那么生成的树是唯一的
如果是手工的话,当有两条边的权值相等时,有可能生成最后各边权值和最小而且相同,但不同的树。