//=======================================================================
// Adjacency Matrix
// BY:CHLAWS
// TIME:08-8-4
// PS:转载请别删除此备注
//=======================================================================
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 //最大顶点数
typedef int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//邻接矩阵类型
typedef char VertexType;
typedef struct {
VertexType vexs[MAX_VERTEX_NUM]; //顶点表
AdjMatrix arcs; //邻接矩阵
int vexnum,arcnum; //图的顶点数和弧数
}MGraph;
int LocateVex(MGraph G,char u);
void CreateMGraph(MGraph &G);
void PrintMGraph(MGraph G);
void main()
{
MGraph G;
CreateMGraph(G);
PrintMGraph(G);
}
int LocateVex(MGraph G,char u)
{
int i;
for (i=0;i<G.vexnum;i++)
{
if (u == G.vexs[i]) return i;
}
if (i == G.vexnum)
{
printf("Error u!/n");
exit(1);
}
return 0;
}
//建立邻接矩阵
//
void CreateMGraph(MGraph &G)
{
int i,j,k,w;
char v1,v2;
printf("Input vexnum & arcnum:");
scanf("%d,%d",&G.vexnum,&G.arcnum);
printf("Input Vertices:");
scanf("%s",G.vexs);
for (i=0;i<G.vexnum;i++)
for (j=0;j<G.vexnum;j++)
G.arcs[i][j]=0;
for (k=0;k<G.arcnum;k++)
{
printf("Input Arcs(v1->v2 &w):/n");
fflush(stdin);
scanf("%c,%c,%d",&v1,&v2,&w);
i=LocateVex(G,v1);
j=LocateVex(G,v2);
G.arcs[i][j]=w;
//G.arcs[j][i]=w;
}
return;
}
void PrintMGraph(MGraph G)
{
int i,j;
printf("Output Vertices:");
printf("%s",G.vexs); printf("/n");
printf("Output AdjMatrix:/n");
for (i=0;i<G.vexnum;i++)
{
for (j=0;j<G.vexnum;j++)
printf("%4d",G.arcs[i][j]);
printf("/n");
}
return;
}
/*
有向图G
a → b
┌
\
↓
c → d
*/
/*
Input vexnum & arcnum:4,4
Input Vertices:abcd
Input Arcs(v1,v2 &w):
a,b,1 //v1->v2,权值=1
Input Arcs(v1,v2 &w):
a,c,1
Input Arcs(v1,v2 &w):
c,d,1
Input Arcs(v1,v2 &w):
d,a,1
Output Vertices:abcd
Output AdjMatrix:
0 1 1 0
0 0 0 0
0 0 0 1
1 0 0 0
请按任意键继续. . .
*/