这里是无向图。
# include <stdio.h>
# include <stdlib.h>
#include <conio.h>
# define MAX 20
#define INF 32767
typedef int VexType;
typedef VexType Mgraph[MAX][MAX]; /* Mgraph是二维数组类型标识符 */
/* 函数原形声明 */
void creat_mg(Mgraph G);
void out_mg(Mgraph G);
Mgraph G1; /* G1是邻接矩阵的二维数组名 */
int n,e,v0;
/* 主函数 */
main()
{ creat_mg(G1); out_mg(G1);
}/* main */
/* 建立邻接矩阵 */
void creat_mg(Mgraph G)
{ int i,j,k,value;
printf("\n n,e=?"); scanf("%d%d", &n,&e); /* 输入顶点数n,边数e */
//初始化
for(i=1; i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==j) G[i][j]=0;
else G[i][j]=INF;
}
/* 如果是网,G[i][j]=0该为G[i][j]=32767(无穷)*/
//输入边
for(k=1;k<=e;k++)
{ printf("\n vi,vj,value=?");
scanf("%d%d%d", &i,&j,&value); //边的顶点和权值
G[i][j]=value;G[j][i]=value; //题目中是无向的
}
} /* creat_mg */
/* 邻接矩阵简单输出,为了检查输入是否正确 */
void out_mg(Mgraph G)
{ int i,j,k; char ch;
for(i=1; i<=n;i++) /* 矩阵原样输出 */
{ printf("\n ");
for(j=1;j<=n;j++) {
if(G[i][j]==INF){
int a=0;
printf("%5d",000);
}
else
printf("%5d",G[i][j]);
}
}
/* 输出所存在的边 */
for(i=1; i<=n;i++)
for(j=1;j<=n;j++)
if(G[i][j]!=INF&&i!=j)
printf("\n 存在边< %d,%d >,权值:%d",i,j,G[i][j]);
} /* out_mg */