数据结构例程——图的邻接矩阵存储结构及算法

本文是[数据结构基础系列(7):图]中第4课时[图的邻接矩阵存储结构及算法]的例程。

#include <stdio.h>
#include <malloc.h>
#define MAXV 100 /*最大顶点数设为100*/
#define LIMITLESS 9999
typedef struct
{
    int no;         //顶点编号
    char info[20];  //顶点其他信息,类型视应用而定
} VertexType;       //顶点类型

typedef struct          //图的定义
{
    int edges[MAXV][MAXV];   //邻接矩阵
    int n, e;               //顶点数,弧数
    VertexType vexs[MAXV];//存放顶点信息
} MGraph;

//建立一个图的邻接矩阵存储
void CreateMGraph(MGraph *G)
{
    /*建立有向图G 的邻接矩阵存储*/
    int i,j,k,w;
    printf("请输入顶点数和边数(输入格式为:顶点数 边数):");
    scanf("%d %d",&(G->n),&(G->e));     /*输入顶点数和边数*/
    printf("请输入顶点信息(输入格式为:顶点号 顶点描述):\n");
    for (i=0; i<G->n; i++)
        scanf("%d %s",&(G->vexs[i].no),G->vexs[i].info); /*输入顶点信息,建立顶点表*/
    for (i=0; i<G->n; i++)   /*初始化邻接矩阵*/
        for (j=0; j<G->n; j++)
        {
            if(i==j)
                G->edges[i][j]=0;
            else
                G->edges[i][j]=LIMITLESS;
        }
    printf("请输入每条边对应的两个顶点的序号及权值(输入格式为:i j w):\n");
    for (k=0; k<G->e; k++)
    {
        scanf("%d %d %d",&i,&j,&w); /*输入e 条边,建立邻接矩阵*/
        G->edges[i][j]=w;       /*若为无权图,直接G->edges[j][i]=1;,无需输入w*/
    }
}/*CreateMGraph*/

//显示一个用邻接矩阵存储的图
void DispMGraph(MGraph *G)
{
    int i,j;
    printf("顶点数: %d,边数: %d\n", G->n, G->e);
    printf("%d 个顶点的信息::\n", G->n);
    for (i=0; i<G->n; i++) /*输出顶点信息*/
        printf("%5d %5d %s\n", i, G->vexs[i].no, G->vexs[i].info);
    printf("各顶点相连的情况:\n");
    printf("\t");
    for (j=0; j<G->n; j++)
        printf("[%d]\t", j);
    printf("\n");
    for (i=0; i<G->n; i++)
    {
        printf("[%d]\t", i);
        for (j=0; j<G->n; j++)
        {
            if(G->edges[i][j]==LIMITLESS)
                printf("∞\t");
            else
                printf("%d\t", G->edges[i][j]);
        }
        printf("\n");
    }
}/*DispMGraph*/

int main()
{
    MGraph *g;
    g = (MGraph *)malloc(sizeof(MGraph));
    CreateMGraph(g);
    DispMGraph(g);
    return 0;
}
时间: 2024-11-10 00:39:09

数据结构例程——图的邻接矩阵存储结构及算法的相关文章

数据结构例程——图的遍历

本文是[数据结构基础系列(7):图]中第6课时[图的遍历]的例程. 1.深度优先遍历--DFS(程序中graph.h是图存储结构的"算法库"中的头文件,详情请单击链接-) #include <stdio.h> #include <malloc.h> #include "graph.h" int visited[MAXV]; void DFS(ALGraph *G, int v) { ArcNode *p; int w; visited[v]=

C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析_C 语言

本文实例讲述了C++实现图的邻接矩阵存储和广度.深度优先遍历的方法.分享给大家供大家参考.具体如下: 示例:建立如图所示的无向图 由上图知,该图有5个顶点,分别为a,b,c,d,e,有6条边. 示例输入(按照这个格式输入): 5 6 abcde 0 1 1 0 2 1 0 3 1 2 3 1 2 4 1 1 4 1 输入结束(此行不必输入) 注:0 1 1表示该图的第0个顶点和第1个定点有边相连,如上图中的a->b所示       0 2 1表示该图的第0个顶点和第2个定点有边相连,如上图中的a

数据结构例程——对称矩阵的压缩存储及基本运算

本文针对数据结构基础系列网络课程(5):数组与广义表中第2课时特殊矩阵的压缩存储. 问题:用压缩形式存储对称矩阵,实现下面的操作并测试 void Init(int *&b);//为N阶对称矩阵初始化存储数据的一维数组b int Value(int b[], int i, int j);//返回存储在b[M]中,对应二维数组A[i][j]的值 void Assign(int b[], int e, int i, int j);//将e赋值给对应二维数组元素A[i][j],要存储到b[M]中 voi

数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)

本文是[数据结构基础系列(7):图]中第4课时[图的邻接矩阵存储结构及算法]和第5课时[图的邻接表存储结构及算法],并为后续内容的实践提供支持. 图的存储结构主要包括邻接矩阵和邻接表,本算法库提供存储结构的定义,以及用于构造图存储结构.不同结构的转换及显示的代码.算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:graph.h,包含定义图数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED

数据结构例程——应用图的深度优先遍历思路求解问题

本文是[数据结构基础系列(7):图]中第8课时[图的邻接矩阵存储结构及算法]的例程. (程序中graph.h是图存储结构的"算法库"中的头文件,详情请单击链接-) 1.是否有简单路径? 问题:假设图G采用邻接表存储,设计一个算法,判断顶点u到v是否有简单路径. #include <stdio.h> #include <malloc.h> #include "graph.h" int visited[MAXV]; //定义存放节点的访问标志的全

大话数据结构十八:图的存储结构之邻接矩阵

1. 邻接矩阵(无向图)的特点: 图的邻接矩阵存储方式是用两个数组来表示图: 1.)一个一维数组存储存储图中顶点信息. 2.)一个二维数组(称为邻接矩阵)存储图中边或弧的信息. 上图中我们设置两个数组: 顶点数组:vertex[4] = {V0,V1,V2,V3} 边数组:arc[4][4] 为对称矩阵(0表示顶点间不存在边,1表示顶点间存在边) 2. 邻接矩阵(有向图)的特点: 无向图的边构成了一个对称矩阵,貌似浪费了一半的空间,那如果是有向图来存放,会不会把资源利用好呢? 更多精彩内容:ht

数据结构例程——每对顶点之间的最短路径

本文是[数据结构基础系列(7):图]中第14课时[每对顶点之间的最短路径]的例程. [Floyd算法实现] (程序中graph.h是图存储结构的"算法库"中的头文件,详情请单击链接-) #include <stdio.h> #include <malloc.h> #include "graph.h" #define MaxSize 100 void Ppath(int path[][MAXV],int i,int j) //前向递归查找路径上

数据结构例程——拓扑排序

本文是[数据结构基础系列(7):图]中第11课时[拓扑排序]的例程. (程序中graph.h是图存储结构的"算法库"中的头文件,详情请单击链接-) [代码] #include <stdio.h> #include <malloc.h> #include "graph.h" void TopSort(ALGraph *G) { int i,j; int St[MAXV],top=-1; //栈St的指针为top ArcNode *p; for

数据结构例程——从一个顶点到其余各顶点的最短路径

本文是[数据结构基础系列(7):图]中第13课时[从一个顶点到其余各顶点的最短路径]的例程. (程序中graph.h是图存储结构的"算法库"中的头文件,详情请单击链接-) #include <stdio.h> #include <malloc.h> #include "graph.h" #define MaxSize 100 void Ppath(int path[],int i,int v) //前向递归查找路径上的顶点 { int k;