图的创建——邻接矩阵法

#include <stdio.h>
#define Maxvertexnum 100
typedef char VertexData;
typedef int AdjType;
typedef int OtherInfo;//权值
typedef struct ArcNode{//边信息
    AdjType adj;//边的信息1代表有边,0代表没边
    OtherInfo info;
}ArcNode;
typedef struct {//邻接矩阵
    VertexData vertex[Maxvertexnum];//顶点数组
    ArcNode arcs[Maxvertexnum][Maxvertexnum];//定义邻接矩阵
    int vexnum,arcnum;//定义结点和边的数目
}AdjMatrix;

int LocateVertex(AdjMatrix *G,VertexData v){//求顶点的在顶点数组的下标
    int j=-1,k,i;
    for(k=0;k<G->vexnum;k++){
        if(G->vertex[k]==v){
            j=k;
            break;
        }
    }
    return j;
}

void GreateMatrix(AdjMatrix *G){//使用邻接矩阵创建无向图
    char v1,v2;
    int i,j,k;
    printf("使用邻接矩阵创建图,请输入图的顶点个数和弧数!\n");
    scanf("%d %d",&G->vexnum,&G->arcnum);
    for (i = 0; i <G->vexnum ; ++i) {//初始化
        for (j = 0; j <G->vexnum ; ++j) {
            G->arcs[i][j].adj=0;
        }
    }
    printf("请输入图的各个顶点\n");
    for (int l = 0; l < G->vexnum; ++l) {
        fflush(stdin);
        scanf("%c",&G->vertex[l]);
    }
    printf("输入两个相连的顶点名称!\n");
    for (k = 0; k < G->arcnum; ++k) {
        fflush(stdin);
       scanf("%c-%c",&v1,&v2);
       i=LocateVertex(G,v1);
       j=LocateVertex(G,v2);
       G->arcs[i][j].adj=1;//无向图
       G->arcs[j][i].adj=1;
    }
    printf("打印出用邻接矩阵创建的无向图!\n");
    for (i = 0; i < G->vexnum ;++i) {
        for (j = 0; j < G->vexnum; ++j) {
            printf("%d ",G->arcs[i][j].adj);
        }
        printf("\n");
    }
}
int main() {
    printf("使用邻接矩阵创建无向图!\n");
    AdjMatrix G;
    GreateMatrix(&G);
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容