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