/*建立有无向图的邻接矩阵*/
#include”stdio.h”
#include”stdlib.h”
//图的邻接矩阵储存结构
typedef char elemtype;
#define maxsize 10
typedef struct{
    elemtype vex[maxsize];//顶点表
    int arc[maxsize][maxsize];//邻接矩阵
    int n,e;//边数,顶点数
}graph;
//在图中查找顶点v,存在返回其在顶点数组中的下标,不存在返回-1
int locatevex(graph g,elemtype v)
{
    int i;
    for(i=0;i<g.n;i++)if(g.vex[i]==v)return i;
    return -1;
}
//打印信息
void print(graph g)
{
    int i,j;
    printf(“图的邻接矩阵表示:\n”);
    for(i=0;i<g.n;i++){
        for(j=0;j<g.n;j++){
            printf(“%3d”,g.arc[i][j]);
        }
        printf(“\n”);
    }
}
//创建有向图的邻接矩阵
void creategraph(graph *g){
    int i,j,k,w;
    elemtype v1,v2;
    printf(“请输入顶点数和边数:\n”);
    printf(“顶点数n=”);scanf(“%d”,&g->n);
    printf(“边  数e=”);scanf(“%d”,&g->e);
    printf(“请输入图的顶点信息:\n”);
    getchar();
    for(i=0;i<=g->n;i++)
    scanf(“%c”,&g->vex[i]);
    for(i=0;i<g->n;i++)
        for(j=0;j<g->n;j++)
            g->arc[i][j]=0;//初始化邻接矩阵
    printf(“请输入图的边的信息:\n”);
    for(k=0;k<g->e;k++)
    {
        printf(“请输入第%d条边的两个端点:”,k+1);
        scanf(“%c%c”,&v1,&v2);
        fflush(stdin);//清空输入缓冲区
        i=locatevex(*g,v1);j=locatevex(*g,v2);
        if(i>=0&&j>=0){
        g->arc[i][j]=1;
        //g->arc[j][i]=g->arc[i][j];无向网矩阵对称
        }
    }
}
int main()
{
    graph g;
    creategraph(&g);
    print(g);
    return 0;
}
 

版权声明:本文为1772642558sgzj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/1772642558sgzj/p/9334870.html