实验过程记录:
1、图的基本操作
(1)请选择用邻接矩阵存储方式或邻接表的存储方式创建图(图的种类可自行选择,为了便于下一个实验,可选择创建无向带权图)。(2)求出所创建图中某一顶点的度(如果创建的是有向图,分别求出出度和入度)。
(3)实现所创建图的深度优先和广度优先遍历。
(4)判断任一图是否连通。
猜题游戏
实验源码:
#include "stdio.h"
/*完成图的抽象数据类型定义*/
#define MAX 50
typedef struct
{
char vexs[MAX];
int arcs[MAX][MAX];
int vexnum,arcnum;
}MGraph;
/*建立图的函数*/
void Creat(MGraph *MG)
{
int i,j,k,m,w;
char v1,v2;
printf("\n Input vexnum(顶点数): ");
投资小利润高的小生意
scanf("%d",&MG->vexnum);
printf("\n Input arcnum(边数): ");
scanf("%d",&MG->arcnum);
getchar();
for(i=1;i<=MG->vexnum;i++)
{
printf("\n Input %dth vex(char): ",i);
scanf("%c",&MG->vexs[i]);
getchar();
}
for(i=1;i<=MG->vexnum;i++)
for(j=1;j<=MG->vexnum;j++)
MG->arcs[i][j]=0;
for(k=1;k<=MG->arcnum;k++)
清炒嫩南瓜{
printf("\n Input %d arc v1(char) v2(char) w(int): ",k);
scanf("%c %c %d",&v1,&v2,&w);
getchar();
for(m=1;m<=MG->vexnum;m++)
if(MG->vexs[m]==v1)
{
i=m;
break;
}
for(m=1;m<=MG->vexnum;m++)
if(MG->vexs[m]==v2)
{
j=m;
break;时尚套装
}
MG->arcs[i][j]=MG->arcs[j][i]=w;
}
}
/
/计算顶点的度
void Degree(MGraph *MG)
{
int i,j;
int count;
for(i=1;i<=MG->vexnum;i++)
{
count=0;
for(j=1;j<=MG->vexnum;j++)
{
if(MG->arcs[i][j]!=0)
count++;
送鲜花
}
雪地寻踪printf("\n顶点%c的度是: %d\n",MG->vexs[i],count);
}
}
int visited[MAX]={0}; /*访问数据,被访问置1,否则置为0*/ /*深度遍历顶点i的函数*/
void DFS(MGraph *MG,int i)
{
int j;
visited[i]=1;
printf("%3c",MG->vexs[i]);
for(j=1;j<=MG->vexnum;j++)
if(!visited[j]&&MG->arcs[i][j]!=0)
DFS(MG,j);
}
/*广度遍历顶点v的函数*/
void BFS(MGraph *MG,int v)
{
int Q[30];
int i,j;
int front=0,rear=0;
//printf("%c\t",MG->vexs[v]);
visited[v]=1;scr脱硝
rear++;
Q[rear]=v;
while(rear!=front)
{
front++;
i=Q[front];
for(j=1;j<MG->vexnum;j++)
if(!visited[j]&&MG->arcs[i][j]!=0)
{
printf("%c\t",MG->vexs[v]);
visited[j]=1;
rear++;
Q[rear]=j;
}
}
}
/*深度遍历整个图的函数并判断图的连通性*/
void DFSTraver(MGraph *MG)
{
int i;
int count=0;
for(i=1;i<MG->vexnum;i++)
visited[i]=0;
for(i=1;i<MG->vexnum;i++)
if(!visited[i])
{
DFS(MG,i);
我的生日英文
count++;
}
if(count==1)
printf("\n该图是连通图!!!\n");
el
printf("\n该图不是连通图!!!\n");
}
main()
{
MGraph MG;
Creat(&MG); //建立图
Degree(&MG); //计算图中各顶点的度(确认图的模型)DFSTraver(&MG);//检查图的连通性
BFS(&MG,1); //验证广度优先遍历图序列
}
实验结果分析与小结: