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

更新时间:2023-06-30 14:31:02 阅读: 评论:0

实验项目名称:  图的遍历                     
一、实验目的
    应用所学的知识分析问题、解决问题,学会用建立图并对其进行遍历,提高实际编程能力及程序调试能力。
二、实验内容
    问题描述:建立有向图,并用深度优先搜索和广度优先搜素。输入图中节点的个数和边的个数,能够打印出用邻接表或邻接矩阵表示的图的储存结构。
三、实验仪器与设备
    计算机,Code::Blocks。
四、实验原理
    用邻接表存储一个图,递归方法深度搜索和用队列进行广度搜索,并输出遍历的结果。
五、实验程序及结果
#define INFINITY 10000 /*无穷大*/
#define MAX_VERTEX_NUM 40
#define MAX 40
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef struct ArCell{
int adj;
}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{ char name[20];
}infotype;
typedef struct
海南医学院是几本{  infotype vexs[MAX_VERTEX_NUM];
AdjMatrix arcs;
int vexnum,arcnum;
}MGraph;
int LocateVex(MGraph *G,char* v)
{ int c = -1,i;
for(i=0;i<G->vexnum;i++)
if(strcmp(v,G->vexs[i].name)==0)
{ 毛巾操c=i; break;}
return c;}
MGraph * CreatUDN(MGraph *G)//初始化图,接受用户输入
{
int i,j,k,w;
黑贝壳
char v1[20],v2[20];
printf("请输入图的顶点数,弧数:");
scanf("%d%d",&G->vexnum,&G->arcnum);
printf("结点名字:\n");
for(i=0;i<G->vexnum;i++){
printf("No.%d:",i+1);
scanf("%s",G->vexs[i].name);}
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
G->arcs[i][j].adj=INFINITY;
printf("请输入一条边依附的两个顶点和权值:\n");
for(k=0;k<G->arcnum;k++)
{printf("第%d条边:\n",k+1); 
printf("起始结点:");
scanf("%s",v1);   
printf("结束结点:");
scanf("%s",v2); 
//printf("边的权值:"); 
//scanf("%d",&w);
i=LocateVex(G,v1);  j=LocateVex(G,v2);
悲恸欲绝if(i>=0&&j>=0){
//G->arcs[i][j].adj=w;
G->arcs[j][i]=G->arcs[i][j];
}}
return G;
}
int FirstAdjVex(MGraph *G,int v)
{
int i;
if(v<=0 && v<G->vexnum){ //v合理
for(i=0;i<G->vexnum;i++)
if(G->arcs[v][i].adj!=INFINITY)
return i;
}
return -1;
}新奥尔良炸鸡
void VisitFunc(MGraph *G,int v)
{
printf("%s ",G->vexs[v].name);
}
int NextAdjVex(MGraph *G,int v,int w)
{男同短篇小说
int k;
if(v>=0 && v<G->vexnum && w>=0 && w<G->vexnum)//v,w合理
{
for( k=w+1;k<G->vexnum;k++)
if(G->arcs[v][k].adj!=INFINITY)
return k;
}
return -1;
}
int visited[MAX];
void DFS(MGraph *G,int v)//从第v个顶点出发递归地深度优先遍历图G
{
int w;
visited[v]=1;
VisitFunc(G,v);//访问第v个结点
for(w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
if(!visited[w]){
DFS(G,w);
printf("%d ",G->arcs[v][w]);}
}
void DFSTraver(MGraph *G,char *s)//深度优先遍历
{int v,k;
for(v=0;v<G->vexnum;v++)
visited[v]=0;
k=LocateVex(G,s);
if(k>=0&&k<G->vexnum){
for(v=k;v>=0;v--){
if(!visited[v])
DFS(G,v);}
for(v=k+1;v<G->vexnum;v++)
if(!visited[v])
魔鬼城在哪DFS(G,v);
}
}
typedef struct Qnode
{
int vexnum;
struct Qnode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;ps添加水印
int InitQueue(LinkQueue *Q)
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q->front)exit(0);
Q->front->next=NULL;
return 1;
}
void EnQueue(LinkQueue *Q,int a )
{
QueuePtr p;

本文发布于:2023-06-30 14:31:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1070331.html

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

标签:实验   结点   深度   搜索   优先   遍历   个数   顶点
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图