图的实现及遍历
}
}
void DFS(ALGraph *G)
{
int i;
for(i=0;i<G->n;i++)
visited[i]=FALSE;
for(i=0;i<G->n;i++)
if(!visited[i])
DFSM(G,i);
}
void BFS(ALGraph *G,int k)
{
int i,f=0,r=0;
i=cq[f]; f=f+1;
for(j=0;j<G->n;j++)
if(G->edges[i][j]==1 && !visited[j])
{
printf("%c",G->vexs[j]);
visited[j]=TRUE;
r=r+1; cq[r]=j;}
}
}
//==========main=====
void CreatALGraph(ALGraph *G)
{
int i,j,k;
char a;
EdgeNode *s;
printf("Input VertexNum(n) and EdgesNum(e): ");
scanf("%d,%d",&G->n,&G->e);
scanf("%c",&a);
printf("Input Vertex string:");
int cq[MaxVertexNum];
for(i=0;i<G->n;i++)
visited[i]=FALSE;
for(i=0;i<G->n;i++)
cq[i]=-1;
printf("%c",G->vexs[k]);
visited[k]=TRUE;
cq[r]=k;
while(cq[f]!=-1)
{
DFS(G);
printf("\n");
printf("Print Graph BFS: ");
BFS(G,3);
printf("\n");
}
(五)运行结果:
1)邻接矩阵作为存储结构的程序运行结果:
2)邻接链表作为存储结构的程序运行结果:
(六)需求分析
1
2
3
(七)用到的函数或结构体:
1)邻接矩阵作为存储结构的程序:
typedef struct vnode
{
char vertex;
EdgeNode *firstedge;
}VertexNode;
typedef VertexNode AdjList[MaxVertexNum];
typedef struct {
AdjList adjlist;
int n,e;
} ALGraph;
typedef enum
Printf
Scanf
void DFSM
void DFS
void BFS
void main()
(八)心得体会:
通过此次实验我再一次深刻的体会到了实际动手操作的重要性。使我清楚的知道技术上的东西,细节更显得尤为重要和值得重视。同时,我更加理解了有向图与无向图之间的区别与联系。基本掌握邻接矩阵和邻接链表建立图的存储结构;学会了用DFS及BFS对图的遍历操作。深深体会到了图结构在工程领域的广泛运用。困难虽有,但在我的努力下,最后还是成功完成了实验。使我对数据结构这门课程更加感兴趣。
r=r+1; cq[r]=p->adjvex;
}
p=p->next;
}
}//endwhile
}
void main()
{
int i;
ALGraph *G;
G=(ALGraph *)malloc(sizeof(ALGraph));
CreatALGraph(G);
printf("Print Graph DFS: ");
s->adjvex=i;
s->next=G->adjlist[j].firstedge;
G->adjlist[j].firstedge=s;
}
}
typedef enum{FALSE,TRUE} Boolean;
Boolean visited[MaxVertexNum];
void DFSM(ALGraph *G,int i)
char vexs[MaxVertexNum];
int edges[MaxVertexNum][MaxVertexNum];
int n,e;
}MGraph;
void CreatMGraph(MGraph *G)
{
int i,j,k;
char a;
printf("Input VertexNum(n) and EdgesNum(e): ");
while(cq[f]!=-1) {
i=cq[f];பைடு நூலகம்f=f+1;
p=G->adjlist[i].firstedge;
while(p) {
if(!visited[p->adjvex]) {
printf("%c",G->adjlist[p->adjvex].vertex);
visited[p->adjvex]=TRUE;
{
EdgeNode *p;
printf("%c",G->adjlist[i].vertex);
visited[i]=TRUE;
p=G->adjlist[i].firstedge;
while(p) {
DFSM(G,p->adjvex);
if(! visited[p->adjvex])
p=p->next;
scanf("%d,%d",&G->n,&G->e);
scanf("%c",&a);
printf("Input Vertex string:");
for(i=0;i<G->n;i++)
{
scanf("%c",&a);
G->vexs[i]=a; }
for(i=0;i<G->n;i++)
for(j=0;j<G->n;j++)
EdgeNode *p;
int cq[MaxVertexNum];
for(i=0;i<G->n;i++)
visited[i]=FALSE;
for(i=0;i<=G->n;i++)
cq[i]=-1;
printf("%c",G->adjlist[k].vertex);
visited[k]=TRUE;
cq[r]=k;
BFS(G,3);
printf("\n");
}
2)邻接链表作为存储结构的程序
#include"stdio.h"
#include"stdlib.h"
#define MaxVertexNum 50
typedef struct node
{
int adjvex;
struct node *next;
}EdgeNode;
DFSM(G,j);
}
void DFS(MGraph *G)
{
int i;
for(i=0;i<G->n;i++)
visited[i]=FALSE;
for(i=0;i<G->n;i++)
if(!visited[i])
DFSM(G,i);
}
void BFS(MGraph *G,int k)
{
int i,j,f=0,r=0;
for(i=0;i<G->n;i++)
{
scanf("%c",&a);
G->adjlist[i].vertex=a;
G->adjlist[i].firstedge=NULL;
}
printf("Input edges,Creat Adjacency List\n");
for(k=0;k<G->e;k++) {
typedef struct
MaxVertexNum
void CreatMGraph
typedef enum
Printf
Scanf
void DFSM
void DFS
void BFS
void main()
2)邻接链表作为存储结构的程序
typedef struct node
MaxVertexNum
typedef struct vnode
数据结构【第六次】实验报告
实验六
(一)实验名称:图的实现及遍历
(二)实验目的:
1)
2)
3)
4)
(三)实验要求:
1)
2)
(四)
1)邻接矩阵作为存储结构的程序
#include"stdio.h"