码迷,mamicode.com
首页 > 其他好文 > 详细

建立有向图的邻接矩阵

时间:2018-07-19 13:52:03      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:有向图   矩阵   size   fine   str   return   print   efi   下标   

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

建立有向图的邻接矩阵

标签:有向图   矩阵   size   fine   str   return   print   efi   下标   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!