建立有向图的邻接矩阵
Posted 1772642558sgzj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建立有向图的邻接矩阵相关的知识,希望对你有一定的参考价值。
/*建立有无向图的邻接矩阵*/
#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("图的邻接矩阵表示:
");
for(i=0;i<g.n;i++){
for(j=0;j<g.n;j++){
printf("%3d",g.arc[i][j]);
}
printf("
");
}
}
//创建有向图的邻接矩阵
void creategraph(graph *g){
int i,j,k,w;
elemtype v1,v2;
printf("请输入顶点数和边数:
");
printf("顶点数n=");scanf("%d",&g->n);
printf("边 数e=");scanf("%d",&g->e);
printf("请输入图的顶点信息:
");
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("请输入图的边的信息:
");
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;
}
以上是关于建立有向图的邻接矩阵的主要内容,如果未能解决你的问题,请参考以下文章