数据结构实验(C语言):图(邻接矩阵表示及输出)

文章参考过网上的内容,如有侵权,请联系

#include
#include
#define MAX_NUM 20  //顶点最大个数

typedef struct ArcCell
{
    int adj;  //用1和0表示顶点是否相邻
}ArcCell,AdjMatrix[MAX_NUM][MAX_NUM];

typedef struct
{
    int vexs[MAX_NUM];  //顶点向量
    AdjMatrix arcs;  //邻接矩阵
    int vnum,anum;  //图的当前顶点数和弧数
}MGraph;

int LocateVex(MGraph G,int v1)
{
    for(int i=G.vnum-1;G.vexs[i]!=v1;i--)
        return i;
}

int Create(MGraph &G)
{  //采用数组(邻接矩阵)表示法,构造无向网G
    int v1,v2,i,j,k;  //弧的顶点
    printf("输入顶点\n");
    for(i=0;i<G.vnum;++i) scanf("%d",&G.vexs[i]);  //构造顶点向量
    for(i=0;i<=G.vnum;++i)  //初始化邻接矩阵
    for(j=0;j<=G.vnum;++j)  G.arcs[i][j]={0};
    printf("输入边\n");
    for(k=0;k<G.anum;++k){  //构造邻接矩阵
        scanf("%d%d",&v1,&v2);  //输入一条边的两个顶点
        //i=LocateVex(G,v1); j=LocateVex(G,v2);  //确定v1,v2在G中的位置
        G.arcs[v1][v2].adj=1;
        G.arcs[v2][v1]=G.arcs[v1][v2];  //置的对称弧
    }
    return 1;
}

void disp(MGraph G)
{//输出矩阵
    int j;
    for(int i=1;i<=G.vnum;i++){
        for(j=1;j<=G.vnum;j++){
            printf("%d ",G.arcs[i][j].adj);
            if(j==G.vnum) printf("\n");
        }
    }
}

int main()
{
    int vnum1,anum1;
    MGraph G;
    printf("输入顶点数\n");
    scanf("%d",&vnum1);
    printf("输入弧数\n");
    scanf("%d",&anum1);
    G.vnum=vnum1;
    G.anum=anum1;
    Create(G);
    disp(G);
}

你可能感兴趣的:(课程实验)