本课程设计主要完成邻接矩阵和邻接表两种不同存储方式的图的建立和遍历,其中遍历部分分别进行了DFS和BFS两种不同形式的遍历。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stack>
#include<queue>
using namespace std;
/********************************图的存储结构定义***********************/
#define MaxVerNum 30
#define Vextype char
#define EdgeInfoType int
#define INF 999 //无穷大
#define MAXSIZE 100
typedef struct
{
Vextype vexs[MaxVerNum];
EdgeInfoType edges[MaxVerNum][MaxVerNum];
int n, e;
}MGragh;
typedef struct node
{
int adjvex;
EdgeInfoType Info;
struct node * next;
}EdgeNode;
typedef struct vnode
{
Vextype vertex;
EdgeNode *firstedge;
}VertexNode;
typedef struct
{
VertexNode adjlist[MaxVerNum];
int n, e;
}ALGraph;
int visited[MaxVerNum]; //顶点访问标记
/*建立图G的邻接矩阵 */
int returnId(MGragh *g, char c){
//返回c在数组中的下标
for (int i = 0; i<MaxVerNum; ++i)
{
if (g->vexs[i] == c) return i;
}
return -1;
}
void CreateGraph(MGragh *g)
{
scanf("%d %d\n", &(g->n), &(g->e));
char c;
int i = 0;
while (1)
{
while ((c = getchar()) == ' ');
if (c == '\n') break;
g->vexs[i++] = c;
}
Vextype s, e;
EdgeInfoType cost;
for (i = 0; i<g->n; i++)
{
for (int j = 0; j<g->n; j++)
{
g->edges[i][j] = 0;
}
}
for (int i = 0; i<g->e; ++i)
{
scanf("%c %c %d\n", &s, &e, &cost);
g->edges[returnId(g, s)][returnId(g, e)] = cost;
}
}
/* 根据图的邻接矩阵建立图的邻接表