图的存储和遍历实验

广告位

9   一、实验目的 1、掌握图的邻接矩阵和邻接表的存储和表示。 2、掌握图的一些基本应用。 3、掌…

9

 

一、实验目的
1、掌握图的邻接矩阵和邻接表的存储和表示。
2、掌握图的一些基本应用。
3、掌握图的遍历方法。
4、掌握图的最小生成树算法。
5、掌握图的最短路径 Dijkstra 算法。

二、实验内容
1、采用邻接表存储图(要求完成)。
2、输入图并构造邻接矩阵(要求完成)。
3、采用深度优先和广度优先遍历图(要求完成)。


#include <stdio.h> #include <stdlib.h> #define Maxint 10000  //表示极大值 #define MVNum 20      //最大顶点数  typedef struct{     char vexs[MVNum];        //顶点表     int arcs[MVNum][MVNum];  //邻接矩阵     int vexnum, arcnum;      //图的当前点数和边数 }AMGraph;   typedef struct{     int *base;     int front, rear; }Queue;   int visit1[MVNum];  //深度优先遍历辅助数组 int visit2[MVNum];  //广度优先遍历辅助数组   int LocateVex(AMGraph *G, char x) {     int i;     for(i = 0; i < G->vexnum; i++)         if(x == G->vexs[i])             return i;     return -1; }  void CreateUDN(AMGraph *G)  //采用邻接矩阵表示法创建无向网 {     int i, j, k;     char a, b;       printf("Input the vexnum and arcnum:");     scanf("%d %d", &G->vexnum, &G->arcnum);       printf("Input the information of vertexes:n");     for(i = 0; i < G->vexnum; i++)         scanf(" %c", &(G->vexs[i]));       for(i = 0; i < G->vexnum; i++)         for(j = 0; j < G->vexnum; j++)             G->arcs[i][j] = Maxint;          printf("Enter the vertices attached to an edge in turn:n");     for(k = 0; k < G->arcnum; k++ ) {         scanf(" %c,%c", &a, &b);         i = LocateVex(G, a);         j = LocateVex(G, b);         G->arcs[i][j] = 1;         G->arcs[j][i] = 1;     } }  void DFS(AMGraph *G, int a)  //深度优先遍历 {     int i;     printf("%c", G->vexs[a]);     visit1[a] = 1;     for(i = 0; i < G->vexnum; i++) {         if((G->arcs[a][i] != 0) && (!visit1[i]) )             DFS(G,i);     } }  void InitQueue(Queue *Q) {     Q->base = (int*)malloc(20 * sizeof(int));     Q->rear = Q->front = -1; }  void Enqueue(Queue *Q, int i) {     Q->base[Q->rear++] = i; }  int Dequeue(Queue *Q, int i) {     i = Q->base[Q->front++];     return i; }  int Emptyqueue(Queue *Q) {     if (Q->front == Q->rear)         return 1;     else return 0; }  void BFS(AMGraph *G, int a)  //广度优先遍历 {     Queue L;     int i;     InitQueue(&L);     printf("%c", G->vexs[a]);     visit2[a] = 1;     Enqueue(&L, a);     while (!Emptyqueue(&L)) {         a = Dequeue(&L, a);         for (i = 0; i < G->vexnum; i++)         	if (G->arcs[a][i] == 1 && visit2[i] == 0) {             	printf("%c",G->vexs[i]);             	visit2[i] = 1;             	Enqueue(&L, i);         	}     }  }  int main() {     int i;     AMGraph G;     for (i = 0; i < MVNum; i++)  //初始化辅助数组         visit1[i] = 0;     for (i = 0; i < MVNum; i++)         visit2[i] = 0;       CreateUDN(&G);     printf("The result of DFS is:n");     DFS(&G, 0);     printf("n");          printf("The result of BFS is:n");     BFS(&G, 0);     printf("n");     return 0; } 

 

說着敷衍話

关于作者: 說着敷衍話

为您推荐