根据百度百科定义:一般用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。用邻接矩阵表示图,很容易确定图中任意两个顶点是否有边相连。邻接矩阵分为有向图邻接矩阵和无向图邻接矩阵。对无向图(无向简单图)而言,邻接矩阵一定是对称的,而且对角线一定为零,有向图则不一定如此。
也就是定义邻接矩阵matrix[i][j],其值为顶点i到j上面的权值,类似于matrix[k][k]其值为0,除此以外在声明时都赋初值无穷大,意为不可达
#include<iostream>
#include<limits.h>
using namespace std;
#define MAXVEX 100
typedef struct
{
int matrix[MAXVEX][MAXVEX];
int numNodes, numEdges;
} Graph;
void CreateGraph(Graph *Gp)
{
int i, j, k, w;
bool isDirected;
cout<<"无向图请输入0,有向图请输入1"<<endl;
cin>>isDirected;
cout<<"请输入顶点数和边数(空格分隔):"<<endl;
cin>>Gp->numNodes>>Gp->numEdges;;
for (i=1;i<=Gp->numNodes;i++)
{
for (j=1;j<=Gp->numNodes;j++)
{
if (i==j)
Gp->matrix[i][j]=0;
else
Gp->matrix[i][j]=INT_MAX;
}
}
cout<<"请输入边(vi, vj)和权值w,三个变量空格分隔即可:"<<endl;
for (k=0;k<Gp->numEdges;k++)
{
cin>>i>>j>>w;
Gp->matrix[i][j]=w;
if(!isDirected)
Gp->matrix[j][i]=Gp->matrix[i][j];
}
}
void ShowGraph(Graph M){
int i, j;
for(i=1;i<=M.numNodes;i++){
for(j=1;j<=M.numNodes;j++){
if(M.matrix[i][j]!=INT_MAX)
cout<<M.matrix[i][j]<<" ";
else
cout<<"*"<<" ";
}
cout<<endl;
}
}
int main(void)
{
Graph M;
CreateGraph(&M);
cout<<"邻接矩阵为:"<<endl;
ShowGraph(M);
return 0;
}
运行结果: