数据结构实验-邻接矩阵表示带权值的图(网)

这里是无向图。

# include 
# include 
#include 
# 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 */

你可能感兴趣的:(数据结构)