《数据结构》实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三——图
一、实验目的
1.掌握图的基本概念;
2.掌握图的存储结构及其建立算法;
3.熟练掌握图的两种遍历算法及其应用。
二、实验内容
1.对给定的图G,设计算法输出从V0出发深(广)度遍历图G的深(广)度优先搜索
序列;
2.设计算法输出给定图G的连通分量个数及边(或弧)的数目。
三、实验预习内容
在实验中要用到这几个函数:typedef struct 邻接矩阵的创建,Locate函数去查找,create函数创建图,定义两个指针firstadj,nextadj找寻临接点和下一个临接点,void dfs函数从某一点开始遍历,void dfsgraph进行图的遍历算法,然后就是main 函数。
四、上机实验
1.实验源程序。
#include
#define max 80
int num1=0,num2=0;
bool visited[max]; //标记数组
typedef struct //邻接矩阵
{
char vexs[max];
int arcs[max][max];
int vexnum,arcnum;
} graph;
int locate(graph G,char v) //定位
{
int i;
for(i=0;i if(G.vexs[i]==v) return i; if(i==G.vexnum) return -1; } void creat(graph &G) //创建图 { int i,j,k; char v1,v2; cout<<"Please input the vexnum and the arcnum:"; cin>>G.vexnum>>G.arcnum; cout<<"Please iput the chars in sequence:"; for(i=0;i cin>>G.vexs[i]; for(i=0;i G.arcs[i][j]=0; cout<<"Create the relationship between chars:\n"; for(k=1;k<=G.arcnum;k++) //创建关系 { cout<<"input v1 and v2:"; cin>>v1>>v2; i=locate(G,v1); j=locate(G,v2); G.arcs[i][j]=G.arcs[j][i]=1; } } int firstadj(graph G,int v) //第一个邻接点 { int i; for(i=0;i if(G.arcs[v][i]) return i; if(i==G.vexnum) return -1; } int nextadj(graph G,int v,int w) //下一个邻接点{ int i; for(i=w+1;i if(G.arcs[v][i]) return i; if(i==G.vexnum) return -1; } void dfsv(graph G,int v) //从某一点遍历 { int w; cout< visited[v]=true; w=firstadj(G,v); while(w>=0) { num2++; if(!visited[w]) . dfsv(G,w); w=nextadj(G,v,w); } } void dfsgraph(graph G) //图的遍历 { int i; for(i=0;i visited[i]=false; for(i=0;i if(!visited[i]) { dfsv(G,i); num1++; } } int main() { graph G; int choice,flag=1; char ctinue; for(;flag==1;) { cout<<"\t1.creat graph"<<"\n\t2.output graph"<<"\n\t3.the number of..."<<"\n\t4.the number of bian"< cout<<"Please choose:"; cin>>choice; switch(choice) { case 1:creat(G);break; case 2:{dfsgraph(G);cout< case 3:cout< case 4:cout< } cout<<"Continue(Y/N):"; cin>>ctinue; if(ctinue=='Y'||ctinue=='y') flag=1; else flag=0; } }