数据结构:图子系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; i { for (j = 0; 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);