胡志豪实验报告07图的应用一.docx
《胡志豪实验报告07图的应用一.docx》由会员分享,可在线阅读,更多相关《胡志豪实验报告07图的应用一.docx(7页珍藏版)》请在冰豆网上搜索。
胡志豪实验报告07图的应用一
计算机科学与工程学院
《算法与数据结构》实验报告(七)
专业班级
20XX级计算机XX班
实验地点
J419机房
学生学号
指导教师
张俊
学生姓名
实验时间
2018-5-22
实验项目
图的应用一
实验类别
基础性()设计性(√)综合性()其它()
实验目的及要求
(1)熟练掌握图的基本存储方法;
(2)熟练掌握图的深度优先和广度优先搜索方法;
(3)应用DFS和BFS的思想解决常见问题。
成绩评定表
类别
评分标准
分值
得分
合计
上机表现
积极出勤、遵守纪律
按要求完成设计任务
30分
程序与报告
程序代码规范、功能正确
报告详实完整、体现收获
70分
说明:
评阅教师:
张俊
日期:
2018年5月22日
实验内容
实验内容:
图的两种遍历方法及对应的生成树。
自己编写源程序,把图的深度优先遍历、广度优先遍历改为输出深度优先生成树、广度优先生成树。
实验说明:
(1)读懂教师给定的程序或课本的程序;
(2)输入图;
(3)把显示遍历序列改为显示深度优先、广度优先生成树。
#ifndefDIGRPH_H
#defineDIGRPH_H
#include
#include
#defineMAXV100
#defineINF32767
typedefcharInfoType;
typedefstructANode
{
intadjvex;
structANode*nextarc;
intweight;
}ArcNode;
typedefstructVnode
{
InfoTypeinfo;
ArcNode*firstarc;
}VNode;
typedefstruct
{
VNodeadjlist[MAXV];
intn,e;
}AdjGraph;
voidCreateAdj(AdjGraph*&G,intA[MAXV][MAXV],intn,inte)
{
inti,j;
ArcNode*p;
G=(AdjGraph*)malloc(sizeof(AdjGraph));
for(i=0;iG->adjlist[i].firstarc=NULL;
for(i=0;ifor(j=n-1;j>=0;j--)
if(A[i][j]!
=0&&A[i][j]!
=INF)
{
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=j;
p->weight=A[i][j];
p->nextarc=G->adjlist[i].firstarc;
G->adjlist[i].firstarc=p;
}
G->n=n;G->e=e;
}
voidDispAdj(AdjGraph*G)
{
inti;
ArcNode*p;for(i=0;in;i++)
{
p=G->adjlist[i].firstarc;printf("%3d:
",i);
while(p!
=NULL)
{
printf("%3d[%d]→",p->adjvex,p->weight);
p=p->nextarc;
}
printf("∧\n");
}
}
voidDestroyAdj(AdjGraph*&G)
{
inti;
ArcNode*pre,*p;
for(i=0;in;i++)
{
pre=G->adjlist[i].firstarc;
if(pre!
=NULL)
{
p=pre->nextarc;
while(p!
=NULL)
{
free(pre);
pre=p;
p=p->nextarc;
}
free(pre);
}
}
free(G);
}
voidDFS(AdjGraph*G,intv)
{
ArcNode*p;intw;
visited[v]=1;
printf("%d",v);
p=G->adjlist[v].firstarc;
while(p!
=NULL)
{
w=p->adjvex;
if(visited[w]==0)
DFS(G,w);
p=p->nextarc;
}
}
#endif
#ifndefSQ_QUEUE
#defineSQ_QUEUE
#defineMaxSize100
typedefstruct
{
ElemTypedata[MaxSize];
intfront,rear;//队首和队尾指针
}SqQueue;
voidInitQueue(SqQueue*&q)
{q=(SqQueue*)malloc(sizeof(SqQueue));
q->front=q->rear=0;
}
voidDestroyQueue(SqQueue*&q)
{
free(q);
}
boolQueueEmpty(SqQueue*q)
{
return(q->front==q->rear);
}
boolenQueue(SqQueue*&q,ElemTypee)
{if((q->rear+1)%MaxSize==q->front)//队满上溢出
returnfalse;
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=e;
returntrue;
}
booldeQueue(SqQueue*&q,ElemType&e)
{if(q->front==q->rear)//队空下溢出
returnfalse;
q->front=(q->front+1)%MaxSize;
e=q->data[q->front];
returntrue;
}
#endif//SQ_QUEUE
#include"digraph.h"
intmain()
{
intA[6][MAXV]={{0,5,0,7,0,0},
{0,0,4,0,0,0},
{8,0,0,0,0,9},
{0,0,5,0,0,6},
{3,0,0,0,1,0}};
AdjGraph*G;
CreateAdj(G,A,6,10);
DispAdj(G);
DestroyAdj(G);
}
实验内容
实验内容
实验总结