图的存储可以用邻接表实现。无向图的邻接矩阵是对称的,而有向图则非对称。以下以无向图的邻接矩阵为例:
#include<iostream>
using namespace std;
typedef char VertexType;//顶点数据类型
typedef int EdgeType;//边上的权值数据类型
const int MAXVEX = 100;//最大顶点数
const int INFINITY = 65535;//代表无穷大
typedef struct
{
VertexType vexs[MAXVEX];//顶点表
EdgeType arc[MAXVEX][MAXVEX];//邻接矩阵,可看作边表
int numVertexes, numEdges;//图中当前的顶点数和边数
}MGraph;
void CreateMGraph(MGraph *G)
{
int i,j,k,w;
printf("请输入顶点数和边数:\n");
scanf("%d,%d",&G->numVertexes,&G->numEdges);
for(i=0; i<G->numVertexes; i++)
{
fflush(stdin);
printf("请输入顶点%d的值:\n",i);
scanf("%c",&G->vexs[i]);
}
for(i=0; i<G->numVertexes; i++)//初始化邻接表
{
for(j=0; j<G->numVertexes; j++)
{
if(i == j)
G->arc[i][j] = 0;
else
G->arc[i][j] = INFINITY;
}
}
for(k=0; k<G->numEdges; k++)//在邻接表中写入具体数据
{
printf("请输入边(vi,vj)上的下标i,j和权w:\n");
scanf("%d,%d,%d",&i,&j,&w);
G->arc[i][j] = w;
G->arc[j][i] = G->arc[i][j];//因为是无向图,矩阵对称
}
}
int main()
{
MGraph G;
CreateMGraph(&G);
for(int i=0; i<G.numVertexes; i++)
{
for(int j=0; j<G.numVertexes; j++)
{
printf("%d ",G.arc[i][j]);
}
printf("\n");
}
//getchar();
system("pause");
return 0;
}
结果: