图的基本操作与应用

更新时间:2023-07-23 23:09:14 阅读: 评论:0

浙江大学城市学院实验报告
课程名称                       数据结构                           
实验项目名称       实验六  图的基本操作与应用                   
实验成绩         指导老师(签名 )          日期               
二.实验目的和要求
1、掌握图的存储结构:邻接矩阵、邻接表。
2、掌握图的深度优先与广度优先两个搜素算法。
3、学会对图的存储结构进行基本操作。
4、加强综合程序的分析、设计能力。
三.实验内容
silent all the years
1、现有14个人(分别用字母A、B、... N表示),他们相互之间的朋友关系如图所示(有线相连表示是朋友关系),分别用邻接矩阵与邻接表表示该关系图,并完成以下功能。
邻接矩阵表示,在此结构上完成:
创建此图;
输出此图的邻接矩阵;
输出从A出发的深度优先搜索序列;
输出从A出发的广度优先搜索序列;
输入两个人p1、p2,判断此两人是否为朋友关系,若不是,给出一种从p1能找到p2的路径;(如输入p1=‘Afine china、p2=‘N’,则A与N不是直接朋友关系,但可以(不唯一)通过A-B-F-K-N方式联系到N。)evil genius
邻接表表示,在此结构上完成:
创建此图;
输出此图的邻接表;
输出从A出发的深度优先搜索序列;
输出从A出发的广度优先搜索序列;
输入两个人p1、p2,判断此两人是否为朋友关系,若不是,给出一种从p1能找到p2的路径;(如输入p1=‘A、p2=‘N’,则A与N不是直接朋友关系,但可以(不唯一)通过A-B-F-K-N方式联系到N。)
建立头文件AdjMatrix.hAdjLink.h分别包含邻接矩阵结构和邻接表结构的操作实现
函数,建立主程序文件test6.cpp,在主函数通过调用来实现上述功能。
自行增加合适的功能,可作为额外的实验成绩进行加分(例如考虑添加或删除一对朋友关系;找出朋友最多的那个人;上面找到A到N的联系路径,若要求找到一条最短的路线怎么找等等)。
2以小组为单位认真考研结果什么时候出填写实验报告,实验报告必须包括各类数据类型的结构定义说明,各类数据的组织方式,系统的功能结构,各个操作的定义以及实现方法,运行结果与分析,难点如何解决,存在问题以及可改进之处等。同时,在实验报告中需写明小组每位同学的分工,得分(小组总分不超过12分)等。实验报告文件取名为report6.doc。每组还必须制作一个答辩PPT以备答辩
3由组长上传实验报告文件report6.doc 、源程序文件test6.cppAdjMatrix.hAdjLink.hBB平台上。
功能模块图:
函数调用结构图:
左侧为邻接矩阵的相关函数,右侧为邻接表的相关函数
结构体定义
typedef struct MGraph
{
    status vexs[MAXMAX];   
    int arcs[MAXMAX][MAXMAX];
    int vernum,arcnum;
}MGraph;  //邻接矩阵
//邻接表
typedef struct ArcNode
{
    int adjvex;      //下标
    struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode
{
    status data;
    ArcNode *firstarc;
} VNode,AdjList[MAXMAX];
typedef struct
{
    AdjList vertices;
    int vexnum,arcnum;
}ALGraph; 
//队列           
typedef struct
{
    int *data;
    int rear;
    int front;
}sqQueue;     
实现思路
深度优先搜索序列利用一个数组来记录顶点是否被访问,对未访问的邻接顶点进行递归,直至所有顶点均被访问。
广度优先搜索序列利用一个数组来记录顶点是否被访问,未被访问的顶点及其邻接点进队列,并且“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至所有顶点均被访问,访问完后出队列至队空。
运行结果与分析
输入数字,进行对应的操作
输入1创建此图,输入1或2建立邻接矩阵或邻接表
可改进之处
可以增加查找两人的最短路径;
可以增加对错误信息的处理;
源代码
test6.cpp
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<windows.h>
#define OK 1
#define FALSE 0
#define TRUE 1
#define ERROR 0
#define INFEASIBLE -1
excite#define OVERFLOW -2   
#define MAXMAX 100
int MAX=14;
typedef struct
{
    char name;
}status;   
typedef struct MGraph
{
    status vexs[MAXMAX];   
adhereto
    int arcs[MAXMAX][MAXMAX];
    int vernum,arcnum;
}MGraph;  //邻接矩阵
//邻接表
typedef struct ArcNode
{
    int adjvex;      //下标
    struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode
{
    status data;
    ArcNode *firstarc;
} VNode,AdjList[MAXMAX];
typedef struct
{
    AdjList vertices;
    int vexnum,arcnum;
}ALGraph; 
  //队列         
typedef struct
必须的英文{
    int *data;
    int rear;
    int front;
}sqQueue;     
int visit[MAXMAX];  //访问标志数组
int v;
#include"Queue.h"
#include"AdjMatrix.h"
#include"AdjLink.h"
篡夺的意思void menu(){
    printf("1.创建此图\n");
    printf("2.输出此图的邻接表或邻接矩阵\n");
    printf("3.输出从A出发的深度优先搜索序列\n");
    printf("4.输出从A出发的广度优先搜索序列\n");
    printf("5.输入两个人p1、p2,判断此两人是否为朋友关系,若不是,给出一种从p1能找到p2的路径\n");
    printf("6.查找朋友最多的那个人\n");
    printf("0.退出\n");
    printf("输入您想进行的操作\n");
}
int main()
{
    MGraph M;
    ALGraph A;
    int n,a;
读    menu();
    while(1)
    {
       
        scanf("%d",&n);
        getchar();
        if(n==1)
        {
            system("CLS");
            MAX=14;
            printf("输入1建立邻接矩阵;输入2建立邻接表\n");
            scanf("%d",&a);
            getchar();
            if(a==1)
            {
                InitMGraph(M);
            }
            if(a==2)
            {
26个汉语拼音字母表                InitALGraph(A);
            }
            printf("输入9返回,输入0退出\n");
        }
        if(n==2)
        {
            system("CLS");
            if(a==1)
            {
                ShowMGraph(M);
            }
            if(a==2)
            {
                ShowALGraph(A);
            }
            printf("输入9返回,输入0退出\n");
        }
        if(n==3)
        {
            system("CLS");
            if(a==1)
            {
                v=0;
                DFSTraverMGraph(M,v);
            }
            if(a==2)
            {
                v=0;
                DFSTraverALGraph(A,v);
            }
            printf("输入9返回,输入0退出\n");
        }
        if(n==4)
        {
            system("CLS");
            if(a==1)
            {
                BFSTraverMGraph(M,v);

本文发布于:2023-07-23 23:09:14,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/186705.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:输入   实验报告   结构
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图