数据结构:图子系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

*题目:编写按键盘输入的数据建立图的邻接矩阵存储

* 编写图的深度优先遍历程序

* 编写图的广度优先遍历程序

* 设计一个选择式菜单形式如下:

* 图子系统

* ***********************************

* * 1------更新邻接矩阵*

* * 2------深度优先遍历*

* * 3------广度优先遍历*

* * 0------返回*

* ***********************************

* 请选择菜单号(0--3):

*/

#include

#include

#define GRAPHMAX 30

#define QUEUEMAX 30

typedef struct //图的邻接表的结构体

{

char value[GRAPHMAX]; //记录图中的点值

int data[GRAPHMAX][GRAPHMAX]; //记录图中的边的关系int n, e; //记录图中的点的个数及边的个数

}pGraph;

typedef struct //队列结构体

{

int queueData[QUEUEMAX];

int front, rear, count; //队头,队尾,数目

}grQueue;

void createCraph(pGraph *G);

void DFSTraverse(pGraph *G);

void BFSTraverse(pGraph *G);

void DFS(pGraph *G, int i);

void BFS(pGraph *G, int i);

void initQueue(grQueue *Q);

int queueEmpty(grQueue *Q);

int queueFull(grQueue *Q);

int outQueue(grQueue *Q);

void inQueue(grQueue *Q, int i);

int visited[GRAPHMAX]; //用于标志性的数组(全局变量)

void main()

{

pGraph G;

int choice, i, j, k = 1;

printf("建立一个有向图的邻接矩阵表示\n");

createCraph(&G);

printf("已建立一个图的邻接矩阵存储\n\n");

for (i = 0; i

{

for(j = 0; j

{

printf("%5d", G.data[i][j]);

}

printf("\n");

}

while (k)

{

printf("\n 图子系统\n");

printf("***********************************\n");

printf("* 1------更新邻接矩阵*\n");

printf("* 2------深度优先遍历*\n");

printf("* 3------广度优先遍历*\n");

printf("* 0------返回*\n");

printf("***********************************\n");

printf("请选择菜单号(0--3):");

fflush(stdin);

scanf("%d", &choice);

switch(choice)

{

case 1:

createCraph(&G);

printf("图的邻接矩阵存储成功\n\n");

break;

case 2:

DFSTraverse(&G);

break;

case 3:

BFSTraverse(&G);

break;

case 0:

k = 0;

break;

default:

printf("输入错误,请重新输入。");

getchar();

k = 1;

break;

}

}

}

void createCraph(pGraph *G) //建立邻接表

{

int i, j, k;

char ch1, ch2;

printf("请输入定点数,边数(格式如3,3):");

scanf("%d,%d",&(G->n), &(G->e));

for(i = 0; i < G->n; i++) //输入顶点值

{

getchar();

printf("请输入第%d顶点的值:", i+1);

scanf("%c", &(G->value[i]));

}

//初始化邻接表

for (i = 0; in; i++)

{

for (j = 0; jn; j++)

{

G->data[i][j] = 0;

}

}

for (k = 0; k < G->e; k++)

{

getchar();

printf("请输入第%d条边的顶点值(格式4,5):", k+1);

scanf("%c,%c", &ch1, &ch2);

相关文档
最新文档