数据结构-图的基础代码

来源:互联网 发布:黄金现货交易软件 编辑:程序博客网 时间:2024/06/05 19:47

1.深度优先搜索(DFS)

启动函数:

#define MAX_VERTEX_NUM 1024bool visited[MAX_VERTEX_NUM];void DFSTraverse(Graph G){for(int v=0;v<G.vexnum;v++)visited[v]=FALSE;for(int v=0;v<G.vexnum;v++)if(!visited[v])DFS(G,v);}

递归函数:

void DFS(Graph G,int v){visit(v);//函数visit用于访问顶点v的相关信息,获取某信息,在此不细写visited[v]=TRUE;for(int w=FirstNeighbor(G,v);w>=0;w=NextNeighor(G,v,w))if(!visited[w])DFS(G,w);}



1.广度优先遍历(BFS)

启动函数

#define MAX_VERTEX_NUM 1024bool visited[MAX_VERTEX_NUM];void BFSTraverse(Graph G){for(int i=0;i<G.vexnum;i++)visited[i]=FALSE;InitQueue(Q);for(int i=0;i<G.vexnum;i++)if(!visited[i])BFS(G,i);};

BFS函数:

void BFS(Graph G,int v){visit(v);visited[v]=TRUE;Enqueue(Q,v);while(!isEmpty(Q)){DeQueue(Q,v);for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w)){if(!visited[w]){visit(w);visited[w]=TRUE;EnQueue(Q,w);}}}}


3.设已给出图的邻接矩阵,要求将邻接矩阵转换为邻接表

#define MAX_VERTEX_NUM 1024#define INFINITY -65535void MGraphToALGraph(MGraph MG,ALGraph *ALG){ALG->vexnum=MG.vexnum;ALG->rcnum=MG.arcnum;for(int i=0;i<ALG->vexnum;i++){(ALG->vertices+i)->first=NULL;(ALG->vertices+i)->data=i;}for(int i=0;i<MG.exnum;i++){for(int j=0;j<MG.exnum;j++){if(MG.Edge[i][j]!=INFINITY){ArcNode *p=new ArcNode;p->data=j;p->next=(ALG->vertices+i)->frist;//头插法(ALG->vertices+i)->frist=p;}}}}


4.设已给出图的邻接表,图有n个顶点,表示为1至n,试写一个算法求顶点k的入度(1<k<n)

int CountInDegree(ALGraph *G,int k){int Indegree=0;for(int i=0;i<G->vexnum;i++){ArcNode *p=(G->vertices+i)->first;while(p){if(p->adjvex==k)Indegree++;p=p->next;}}return Indegree;}


5.有一个有向无环图的根节点R通过他出发的所有有向路径可以到达图的任意一个节点。设计算法使一个有向图作为输入假如此有向无环图有根,确认图的根节点。

#define MAX_VERTEX_NUM 1024bool visited[MAX_VERTEX_NUM];int GetRoot(MGgraph *G){for(int i=0;i<G.vexnum;i++){for(int j=0;j<G.vexnum;j++)visited[j]=FALSE;DFS(G,i);int vextLabel=0;for(int j=0;j<G.vexnum;j++){if(!visited[j])break;vexLabel++;}if(vexLabel==G.vexnum)return i;}}void DFS(Graph G,int v){visit(v);//函数visit用于访问顶点v的相关信息,获取某信息,在此不细写visited[v]=TRUE;for(int w=FirstNeighbor(G,v);w>=0;w=NextNeighor(G,v,w))if(!visited[w])DFS(G,w);}


原创粉丝点击