首页 > 其他 > 详细

建立有向图的邻接矩阵

时间:2018-07-19 13:00:01      阅读:362      评论:0      收藏:0      [点我收藏+]

/*建立有无向图的邻接矩阵*/
#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;
}
 技术分享图片

建立有向图的邻接矩阵

原文:https://www.cnblogs.com/1772642558sgzj/p/9334870.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!