图的顺序存储结构
邻接矩阵
四种图分别实现 下面只给出了有向图的实现,其他三种仅修改最后存储结果即可(网需要读入权重)
#include<stdio.h> #define NumOfVertex 200 #define VertexType int typedef enum{Digraph,Undigraph,DirectedNet,UndirectedNet}GraphKind; typedef struct{ int relation; //无权图用01表示是否相连接 网直接表示权重 //Info; }rlt,rltionMatrix[NumOfVertex][NumOfVertex]; typedef struct{ VertexType Vex[NumOfVertex]; //存顶点 int NumOfVex,NumOfArc; //存顶点和边的数量 rltionMatrix Matrix; // 矩阵 GraphKind kind; //图的类型 }MyGraph; //定位顶点在表中位置 int LocateVex(MyGraph*g,VertexType v){ for(int i = 0;i<g->NumOfVex;i++){ if(g->Vex[i]==v) return i; } printf("None"); return -1; } //创建有向图 void CreatDG(MyGraph *g){ int VNum,ANum; scanf("%d %d",&(g->NumOfVex),&(g->NumOfArc)); //存顶点数据 for(int i =0;i<g->NumOfVex;i++) scanf("%d",&(g->Vex[i])); //printf("RUN HERE"); //初始化矩阵全置为0 for(int i =0;i<g->NumOfVex;i++) for(int j = 0;j<g->NumOfVex;j++) { g->Matrix[i][j].relation=0; //info } //构造矩阵 for(int i = 0;i<g->NumOfArc;i++) { int v1,v2; scanf("%d %d", &v1, &v2); int pos1 = LocateVex(g,v1); int pos2 = LocateVex(g,v2); if(pos1==-1||pos2==-1) return; else g->Matrix[pos1][pos2].relation=1; ////无向图的二阶矩阵沿主对角线对称 //网读入权存入矩阵 } } //void CreateGraph(MyGraph* G) { // //选择图的类型 // scanf("%d", &(G->kind)); // //根据所选类型,调用不同的函数实现构造图的功能 // switch (G->kind) { // case DG: // return CreateDG(G); // break; // case DN: // return CreateDN(G); // break; // case UDG: // return CreateUDG(G); // break; // case UDN: // return CreateUDN(G); // break; // default: // break; // } //} void printG(MyGraph *g){ for (int i = 0;i<g->NumOfVex;i++){ for(int j = 0;j<g->NumOfVex;j++) { printf(" %d ",g->Matrix[i][j].relation); } printf("\n"); } } int main(){ MyGraph g; CreatDG(&g); printG(&g); }
标签:,MyGraph,return,int,break,++,relation From: https://www.cnblogs.com/konataxzy/p/16882270.html