题目要求:
对于下面的这个无向网,给出:
1.“深度优先搜索序列”(从V1开始)
2.“广度优先序列”(从V1开始)
3.“用Prim算法求最小生成树”

代码实现:
1.深度优先搜索:
代码部分:
#include<stdio.h>
#include<malloc.h>
#define MAX 100
typedef struct ArcNode{
	int adjvex;
	int weight;
	struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode{
	char vertex[2];
	ArcNode *firstarc;
}VNode;
typedef VNode AdjList[MAX];
typedef struct ALGraph{
	AdjList adjlist;
	int vexnum,arcnum;
}ALGraph;
int LocateVerTex(ALGraph *G,char *v)
{
	int k;
	for(k=0;k<G->vexnum;k++)
		if(G->adjlist[k].vertex[0] == v[0] && G->adjlist[k].vertex[1] == v[1])
			return k;
	return -1;	
}
void CreateALGraph(ALGraph *G)
{
	int i,adj1,adj2;
	int weight;
	char v1[2],v2[2];
	ArcNode *tmp = NULL;
	printf("请输入顶点个数和边数:\n");
	scanf("%d %d",&G->vexnum,&G->arcnum);
	getchar();
	printf("请输入{%d}个顶点\n",G->vexnum);
	for(i=0;i<G->vexnum;i++){
		scanf("%c%c",&G->adjlist[i].vertex[0],&G->adjlist[i].vertex[1]);
		G->adjlist[i].firstarc = NULL;
	}
	getchar();
	printf("请输入{%d}条边,格式(v1 v2 权值).\n",G->arcnum);
	for(i=0;i<G->arcnum;i++){
		scanf("%c%c %c%c %d",&v1[0],&v1[1],&v2[0],&v2[1],&weight);
		getchar();
		adj1 = LocateVerTex(G,v1);
		adj2 = LocateVerTex(G,v2);
		if(adj1 == -1 || adj2 == -1){
			printf("失败.\n");
			i = i - 1;
			continue;
		}
		else{
			tmp = (ArcNode*)malloc(sizeof(ArcNode));
			tmp->adjvex = adj2;
			tmp->weight = weight;
			tmp->nextarc = G->adjlist[adj1].firstarc;
			G->adjlist[adj1].firstarc = tmp;
			tmp = (ArcNode*)malloc(sizeof(ArcNode));
			tmp->adjvex = adj1;
			tmp->weight = weight;
			tmp->nextarc = G->adjlist[adj2].firstarc;
			G->adjlist[adj2].firstarc = tmp;
			printf("成功.\n");
		}
	}
}
void DFS(ALGraph *G,int v,int *visit)
{	
	int w;
	ArcNode *tmp = NULL;
	visit[v] = 1;
	printf("访问顶点:{%c%c}.\n",G->adjlist[v].vertex[0],G->adjlist[v].vertex[1]);
	tmp = G->adjlist[v].firstarc;
	while(tmp){
		w = tmp->adjvex;
		if(visit[w] == 0){
			DFS(G,w,visit);
		}
		tmp = tmp->nextarc;
	}
}
void DFSTraverse(ALGraph *G)
{
	int visit[G->vexnum];
	int v;
	for(v=0;v<G->vexnum;v++){
		visit[v] = 0;
	}
	for(v=0;v<G->vexnum;v++){
		if(visit[v] == 0){
			DFS(G,v,visit);
		}
	}
}
int main()
{
	ALGraph G;
	CreateALGraph(&G);
	DFSTraverse(&G);
	return 0;
}验证:

2.广度优先搜索:
代码部分:
#include<stdio.h>
#define MAX 100
typedef struct MGraph{
	char vertex[MAX][2];
	int arcs[MAX][MAX];
	int vexnum,arcnum;
}Mgraph;
int LocateVerTex(MGraph *G,char *v)
{
	int k;
	for(k=0;k<G->vexnum;k++){
		if(G->vertex[k][0] == v[0] && G->vertex[k][1] == v[1])
			return k;
	}
	return -1;	
}
void CreateMGraph(MGraph *G)
{
	int i,j,adj1,adj2;
	int weight;
	char v1[2],v2[2];
	printf("请输入顶点个数和边数:\n");
	scanf("%d %d",&G->vexnum,&G->arcnum);
	getchar();
	printf("请输入{%d}个顶点\n",G->vexnum);
	for(i=0;i<G->vexnum;i++){
		scanf("%c%c",&G->vertex[i][0],&G->vertex[i][1]);
	}
	getchar();
	for(i=0;i<G->vexnum;i++)
		for(j=0;j<G->vexnum;j++)
			G->arcs[i][j] = 0;
	printf("请输入{%d}条边,格式(v1 v2 权值).\n",G->arcnum);
	for(i=0;i<G->arcnum;i++){
		scanf("%c%c %c%c %d",&v1[0],&v1[1],&v2[0],&v2[1],&weight);
		getchar();
		adj1 = LocateVerTex(G,v1);
		adj2 = LocateVerTex(G,v2);
		if(adj1 == -1 || adj2 == -1){
			printf("失败.\n");
			i = i - 1;
			continue;
		}
		else{
			G->arcs[adj1][adj2] = weight;
			G->arcs[adj2][adj1] = weight;
			printf("成功.\n");
		}
	}
}
void BFSTraverse(MGraph *G)
{
	int Q[G->vexnum+1],visit[G->vexnum];
	int i,u,w;
	for(i=0;i<G->vexnum;i++)
		visit[i] = 0;
	int front = 0,rear = 0;
	for(i=0;i<G->vexnum;i++){
		if(visit[i] == 0){
			visit[i] = 1;
			printf("输出顶点:{%c%c}\n",G->vertex[i][0],G->vertex[i][1]);
			Q[rear] = i;
			rear = (rear+1) % (G->vexnum+1);
			while(front != rear){
				u = Q[front];
				front = (front+1) % (G->vexnum+1);
				for(w=0;w<G->vexnum;w++){
					if(G->arcs[u][w] != 0 && visit[w] == 0){
						visit[w] = 1;
						printf("输出顶点:{%c%c}\n",G->vertex[w][0],G->vertex[w][1]);
						Q[rear] = w;
						rear = (rear+1) % (G->vexnum+1);
					}
				}
			}
		}
	}
}
int main()
{
	MGraph G;
	CreateMGraph(&G);
	BFSTraverse(&G);
	return 0;
}验证:

3.用Prim算法求得最小生成树:
代码部分:
#include<stdio.h>
#define MAX 100
typedef struct MGraph{
	char vertex[MAX][2];
	int arcs[MAX][MAX];
	int vexnum,arcnum;
}Mgraph;
typedef struct closedge{
	char vertex[MAX][2];
	int lowcost[MAX];
}closedge;
int LocateVerTex(MGraph *G,char *v)
{
	int k;
	for(k=0;k<G->vexnum;k++){
		if(G->vertex[k][0] == v[0] && G->vertex[k][1] == v[1])
			return k;
	}
	return -1;	
}
void CreateMGraph(MGraph *G)
{
	int i,j,adj1,adj2;
	int weight;
	char v1[2],v2[2];
	printf("请输入顶点个数和边数:\n");
	scanf("%d %d",&G->vexnum,&G->arcnum);
	getchar();
	printf("请输入{%d}个顶点\n",G->vexnum);
	for(i=0;i<G->vexnum;i++){
		scanf("%c%c",&G->vertex[i][0],&G->vertex[i][1]);
	}
	getchar();
	for(i=0;i<G->vexnum;i++)
		for(j=0;j<G->vexnum;j++)
			G->arcs[i][j] = 999;
	printf("请输入{%d}条边,格式(v1 v2 权值).\n",G->arcnum);
	for(i=0;i<G->arcnum;i++){
		scanf("%c%c %c%c %d",&v1[0],&v1[1],&v2[0],&v2[1],&weight);
		getchar();
		adj1 = LocateVerTex(G,v1);
		adj2 = LocateVerTex(G,v2);
		if(adj1 == -1 || adj2 == -1){
			printf("失败.\n");
			i = i - 1;
			continue;
		}
		else{
			G->arcs[adj1][adj2] = weight;
			G->arcs[adj2][adj1] = weight;
			printf("成功.\n");
		}
	}
}
int MiniMum(MGraph *G,closedge *cd)
{
	int j,p=1,min=999;
	for(j=0;j<G->vexnum;j++){
		if(cd->lowcost[j] != 0 && cd->lowcost[j] < min){
			min = cd->lowcost[j];
			p = j;
		}
	}
	return p;
}
void MiniSpanTree_PRIM(MGraph *G,char *u)
{
	closedge cd;
	int i,j,k;
	k = LocateVerTex(G,u);
	for(j=0;j<G->vexnum;j++){
		if(j != k){
			cd.vertex[j][0] = u[0];
			cd.vertex[j][1] = u[1];
			cd.lowcost[j] = G->arcs[k][j];
		}
	}
	cd.lowcost[k] = 0;
	printf("最小代价生成树的各条边为:\n");
	for(i=1;i<G->vexnum;i++){
		 k = MiniMum(G,&cd);
		 printf("输出边%c%c->%c%c,权值为:{%d}\n",cd.vertex[k][0],cd.vertex[k][1],G->vertex[k][0],G->vertex[k][1],cd.lowcost[k]);
		 cd.lowcost[k] = 0;
		 for(j=0;j<G->vexnum;j++){
 			if(G->arcs[k][j] < cd.lowcost[j]){
			 	cd.vertex[j][0] = G->vertex[k][0];
			 	cd.vertex[j][1] = G->vertex[k][1];
			 	cd.lowcost[j] = G->arcs[k][j];
			 }
 		}
	}
}
int main()
{
	char original_vertex[2]={'V','1'};
	MGraph G;
	CreateMGraph(&G);
	MiniSpanTree_PRIM(&G,original_vertex);
	return 0;
}验证:



![[LeetCode]-225. 用队列实现栈](https://img-blog.csdnimg.cn/de34221d0eb844148091245e07e4b19b.png)















