数据结构邻接矩阵,邻接表,图实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称:数据结构实验五实验内容:1.使用邻接矩阵建立一个图,深度遍历。2.使用邻接表建立一个图,广度遍历。3.建立一个图,存储结构自己确定,并进行拓扑排序。
实验代码:
1.#include "stdio.h"
#define Infinity 100
#define MaxVertexNum 20
typedef enum {DG,DN,UDG,UDN} GraphKind;
typedef int VRType;
typedef char VertexType;
bool Visit[MaxVertexNum];
typedef struct ArcCell
{
VRType adj;
}ArcCell,AdjMatrix[MaxVertexNum][MaxVertexNum];
typedef struct
{
VertexType vexs[MaxVertexNum];
AdjMatrix arcs; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和弧数
GraphKind kind;
}MGraph;
int LocateVex(MGraph G,VertexType v)
{
for(int i=0;i { if(v==G.vexs[i]) return i; } if (i = G.vexnum) printf("输入的顶点不合法\n"); return 0; } VertexType v1,v2; VRType w; void CreateUDG(MGraph &G) { int i,j,k; printf("请输入顶点数:\n"); scanf("%d",&G.vexnum); printf("请输入弧数:\n"); scanf("%d",&G.arcnum); i = 0; while(i { printf("请输入第%d个顶点\n",i); getchar(); scanf("%c",&G.vexs[i]); ++i; } for(i=0;i { for(j=0;j G.arcs[i][j].adj = 0; } for(k=0;k { printf("请输入一条边依附的顶点及权值(v1 v2 w)\n"); getchar(); scanf("%c %c %d",&v1,&v2,&w); i =LocateVex(G,v1); j =LocateVex(G,v2); G.arcs[i][j].adj= w; G.arcs[j][i] = G.arcs[i][j]; } return; } void DFSTraverse(MGraph &G,int i) { printf("%c ",G.vexs[i]); Visit[i]=true; for(int j=0;j { if(G.arcs[i][j].adj==1&&!Visit[j]) { DFSTraverse(G,j); } } } void DFS(MGraph &G) { int i; for(i=0;i for(i=0;i { if(!Visit[i]) { DFSTraverse(G,i); } } } void main() { MGraph graph; CreateUDG(graph); printf("顶点集合为::"); for (int i=0;i printf("%c ",graph.vexs[i]); printf("\n深度遍历结果是:"); DFS(graph); printf("\n"); return; } 2. #include "stdio.h" #include "stdlib.h" #define MaxVertexNum 20 typedef int InfoType; typedef char VertexType; typedef VertexType QElemType; bool visited[MaxVertexNum]; typedef struct ArcNode { int adjvex; //该弧指向的顶点位置 struct ArcNode *nextarc; //指向下一条弧的指针 InfoType *info; }ArcNode; typedef struct VNode { VertexType data; //顶点信息 ArcNode *firstarc; //指向第一条依附该顶点的弧的指针}VNode,AdjList[MaxVertexNum]; typedef struct { AdjList vertices; int vexnum,arcnum; //图的当前顶点数和弧数 }ALGraph; typedef struct QNode { QElemType data; struct QNode *next; }QNode,*Queueptr; typedef struct { Queueptr front; Queueptr rear; }LinkQueue; void InitQueue(LinkQueue &Q) { Q.front = Q.rear = (Queueptr)malloc(sizeof(QNode)); if(!Q.front) return; Q.front->next = NULL; return; } void EnQueue(LinkQueue &Q,QElemType e) { Queueptr p = NULL;