数据结构实验报告-图的遍历

时间:2024.4.20

实验:图的遍历

一、实验目的:

1、理解并掌握图的逻辑结构和物理结构——邻接矩阵、邻接表

2、掌握图的构造方法

3、掌握图的邻接矩阵、邻接表存储方式下基本操作的实现算法

4、掌握图的深度优先遍历和广度优先原理

二、实验内容:

1、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接矩阵存储改图。

2、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接表存储该图

3、深度优先遍历第一步中构造的图G,输出得到的节点序列

4、广度优先遍历第一部中构造的图G,输出得到的节点序列

三、实验要求:

1、无向图中的相关信息要从终端以正确的方式输入;

2、具体的输入和输出格式不限;

3、算法要具有较好的健壮性,对错误操作要做适当处理;

4、程序算法作简短的文字注释。

四、程序实现及结果:

1、邻接矩阵


#include <stdio.h>

#include <malloc.h>

#define VERTEX_MAX 30  

#define MAXSIZE 20

typedef struct

{

    int arcs[VERTEX_MAX][VERTEX_MAX];      

    int vexnum,arcnum;   

} MGraph;

void creat_MGraph1(MGraph *g)

{   int i,j,k;

    int n,m;

    printf("请输入顶点数和边数:"); 

    scanf("%d%d",&n,&m);

    g->vexnum=n;

    g->arcnum=m;

    for (i=0;i<n;i++)       

      for (j=0;j<n;j++)

         g->arcs[i][j]=0;

    while(1)       

    {

              printf("请输入一条边的两个顶点:\n");

        scanf("%d%d",&i,&j);

              if(i==-1 || j==-1)

              break;

              else if(i==j || i>=n || j>=n)

              {

                     printf("输入错误,请重新输入!\n");

              }

              else

              {

                     g->arcs[i][j]=1;

            g->arcs[j][i]=1;

              }

       

    }

}

void printMG(MGraph *g)

{

  int i,j;

  for (i=0;i<g->vexnum;i++)

  {for (j=0;j<g->vexnum;j++)

   printf(" %d",g->arcs[i][j]);

   printf("\n");

   }

  printf("\n");

}

main()

{

  int i,j;

  int fg;

  MGraph *g1;

  g1=(MGraph *)malloc(sizeof(MGraph));

  printf("1:创建无向图的邻接矩阵\n\n");

  creat_MGraph1(g1);  

  printf("\n此图的邻接矩阵为:\n");

  printMG(g1);

}


2、邻接链表:


#include<stdio.h>

#include<malloc.h>

#define MAX_SIZE 10

typedef struct node{

   int vertex;

   struct node *next;

}node,adjlist[MAX_SIZE];

adjlist g; 

int visited[MAX_SIZE+1];

int que[MAX_SIZE+1];

void creat()

{

   int n,e;

   int i;

   int start,end;

   node *p,*q,*pp,*qq;

   printf("输入无向图的顶点数和边数:");

   scanf("%d%d",&n,&e);

   for(i = 1; i <= n ; i++)

   {

          visited[i] = 0;

          g[i].vertex = i;

          g[i].next = NULL;

   }

   printf("依次输入边:\n");

   for(i = 1; i <= e ; i++)

   {

          scanf("%d%d",&start,&end);

          p=(node *)malloc(sizeof(node));

          p->vertex = end;

          p->next = NULL;

          q = &g[start];

          while(q->next)

                 q = q->next;

          q->next = p;

       p1=(node *)malloc(sizeof(node));

          p1->vertex = start;

          p1->next = NULL;

          q1 = &g[end];

       while(qq->next)

                 q1 = q1->next;

          q1->next = p1;

   }

}

void bfs(int vi)

{

       int front,rear,v;

       node *p;

       front =0;            

       rear = 1;

       visited[vi] = 1;

       que[0] = vi;     

       printf("%d ",vi);

       while(front != rear)

       {

              v = que[front];

              p = g[v].next;

              while(p)       

              {

                     if(!visited[p->vertex])

                     {

                            visited[p->vertex]= 1;

                            printf("%d ",p->vertex);

                            que[rear++] = p->vertex;

                     }

                     p = p->next;

              }

              front++;

       }

}

int main()

{

       creat();

       bfs(1);

       printf("\n");

       return 0;

}

                       

五.实验心得与体会:

(1)通过这次实验,使我基本上掌握了图的存储和遍历,让我弄清楚了如何用邻接矩阵和邻接链表对图进行存储

(2)深度优先遍历和广度优先遍历都有着各自的优点,通过程序逐步调试,可以慢慢的理解这两种遍历方法的内涵和巧妙之处。

(3)实验过程中,总体来说还算顺畅,但在编写过程中,要养成良好的编程习惯,以免出错后浪费大量的时间在查错上。

更多相关推荐:
图的遍历实验报告

数据结构实验报告计科101冯康20xx00814128实验五图的基本操作一实验目的1使学生可以巩固所学的有关图的基本知识2熟练掌握图的存储结构3熟练掌握图的两种遍历算法二实验内容问题描述对给定图实现图的深度优先...

图的遍历实验报告(数据结构)

电子信息工程学系实验报告适用于计算机课程课程名称数据结构实验项目名称图的遍历操作实验时间班级计应102姓名学号实验目的掌握有向图和无向图的概念掌握邻接矩阵和邻接链表建立图的存储结构掌握DFS及BFS对图的遍历操...

数据结构课程实验(图的存储与遍历)

实验五图的存储与遍历1实验目的掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示以及在此两种常用存储方式下深度优先遍历dfs和广度优先遍历BFS操作的实现2实验预备知识1图的存储结构邻接矩阵表示法和邻接表表...

C++图的创建与遍历实验报告

实验五图的遍历及其应用实现一实验目的1熟悉图常用的存储结构2掌握在图的邻接矩阵和邻接表两种结构上实现图的两种遍历方法实现3会用图的遍历解决简单的实际问题二需求分析很多问题都是建立在图的遍历的基础上实现的所以必须...

数据结构图的遍历实验报告

题目:图的遍历的实现完成日期:20##.12.22一、需求分析1.本演示程序中,输入的数据类型均为整型数据,不允许输入字符等其他数据类型,且需要按照提示内容进行输入,成对的关系数据必须在所建立的图中已经存在对应…

实现图的遍历算法实验报告

实现图的遍历算法1需求分析对于下图G编写一个程序输出从顶点0开始的深度优先遍历序列非递归算法和广度优先遍历序列非递归算法2系统设计1用到的抽象数据类型的定义图的抽象数据类型定义ADTGraph数据对象VV是具有...

C++图的创建与遍历实验报告

数据结构集中上机试验报告学院计算机科学与技术专业计算机科学与技术学号00000000班级6姓名题目图的创建与遍历一需求分析很多问题都是建立在图的遍历的基础上实现的所以必须有一个程序能够实现将图进行广度和深度遍历...

图的遍历操作实验报告

图的遍历操作实验报告实验三图的遍历操作一目的掌握有向图和无向图的概念掌握邻接矩阵和邻接链表建立图的存储结构掌握DFS及BFS对图的遍历操作了解图结构在人工智能工程等领域的广泛应用二要求采用邻接矩阵和邻接链表作为...

图的遍历实验报告

课程实验报告课程名称实验项目名称专业班级姓名学号完成时间月实验5图的遍历问题一背景网络蜘蛛即WebSpider是一个很形象的名字把互联网比喻成一个蜘蛛网那么Spider就是在网上爬来爬去的蜘蛛网络蜘蛛是通过网页...

实验十 二组分金属相图(预习报告)

实验十二组分金属相图一实验目的1用热分析法步冷曲线法侧相变点绘制BiCd二组分金属相图2掌握热电偶测量温度的基本原理以及数字控温仪和可控升降温电炉的基本原理和使用二实验原理热分析法是绘制相图的基本方法之一它是利...

实验 二组分固液金属相图的测绘

实验二组分固液金属相图的测绘I目的与要求一用热分析法测绘铅锡二元金属相图了解固液相图的特点二学会热电偶的制作标定和测温技术三掌握自动平衡记录仪的使用方法II基本原理一二组分固液相图人们常用图形来表示体系的存在状...

实验六.二组分金属相图

实验六二组分金属相图一实验目的1学会用热分析法测绘镉铋二元金属相图2了解固液相图的特点进一步学习和巩固相律等有关知识3掌握热电偶的测温的基本方法二基本原理热分析法是根据样品在加热或冷却过程中温度随时间的变化关系...

图的遍历实验报告(32篇)