图的邻接矩阵存储与访问

本文深入探讨了图的邻接矩阵表示方法,详细介绍了如何存储和访问图的边。通过实例展示了邻接矩阵的优势和适用场景,同时讨论了其在内存占用和时间复杂度上的考量。
摘要由CSDN通过智能技术生成
 /*图的相邻矩阵储存类型定义*/
#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);
            }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值