/*图的相邻矩阵储存类型定义*/
#define MaxVertexNum 100 /*最大顶点数设为100*/
typedef char VertexType; /*顶点类型设为字符型*/
typedef int EdgeType; /*边的权值设为整型*/
typedef struct {
VertexType vexs[MaxVertexNum]; /*顶点表*/
EdgeType edges[MaxVertexNum][MaxVertexNum]; /*邻接矩阵,即边表*/
int numVertex,numEdge; /*顶点数和边数*/
}Mgragh,*MGragh; /*Maragh 是以邻接矩阵存储的图类型*/
/*建立有向图G 的邻接矩阵存储*/
void CreateMGraph(MGragh G){
int i,j,k,w;
char ch;
printf("请输入顶点数和边数\n" );
scanf("%d%d",&i,&j);
G->numVertex=i;
G->numEdge=j;
/*输入顶点信息,建立顶点表*/
printf("请输入顶点信息:\n");
for (i=0;i<G->numVertex;i++) {
printf("第%d个点\n", i);
scanf("%s",&G->vexs[i]);
}
/*初始化邻接矩阵*/
for (i=0;i<G->numVertex;i++)
for (j=0;j<G->numVertex;j++)
G->edges[i][j]=0;
/*输入e 条边,建立邻接矩阵*/
printf("请输入每条边对应的两个顶点的序号:\n");
for (k=0;k<G->numEdge;k++){
scanf("%d %d",&i,&j);
G->edges[i][j]=1;
}
}
//深度优先周游
void DFS(MGragh G, int v){
mark[v]=TRUE;
cout<<G->vexs[v];
for(Edge e=FirstEdge(G,v);isEdge(G,e);e=NextEdge(G,e)){
if(mark[e.to]==FALSE) DFS(G,e.to);
}
}
void DFSM(MGragh G,int v){
for(int i=0;i<G->numVertex;i++){
mark[i]=FALSE;
}
DFS(G,0);
}
//广度优先周游
void BFS(MGragh G, int v){
for(int i=0;i<G->numVertex;i++){
mark[i]=FALSE;
}
using std::queue;
queue<int>Q;
cout<<G->vexs[v];
mark[v]=TRUE;
Q.push(v);
while(!Q.empty()){
int u=Q.front();
Q.pop();
for(Edge e=FirstEdge(G,u);isEdge(G,e);e=NextEdge(G,e))
if(mark[e.to]==FALSE){
cout<<G->vexs[e.to];
mark[e.to]=TRUE;
Q.push(e.to);
}
}
}
图的邻接矩阵存储与访问
最新推荐文章于 2023-07-22 22:14:32 发布
本文深入探讨了图的邻接矩阵表示方法,详细介绍了如何存储和访问图的边。通过实例展示了邻接矩阵的优势和适用场景,同时讨论了其在内存占用和时间复杂度上的考量。
2780

被折叠的 条评论
为什么被折叠?



