基本概念
#define MaxSize 10 //最大顶点数目
#define INF 10 //边的最大权值
存储结构
//邻接矩阵
typedef struct{
int no; //定点编号
char info; //顶点其他信息
}VertexType; //定点类型
typedef struct {
int edges[MaxSize][MaxSize];//边 int为权值类型
int n,e; //定点和边数
VertexType vex[MaxSize]; //存放顶点信息
}MGraph; //图的邻接矩阵类型
//邻接表
typedef struct ArcNode{
int adjvex; //该边所指向结点的位置 - 数组序号
struct ArcNode *nextarc; //指向下一条边的指针
int info; //边的权值
}ArcNode; //边的定义
typedef struct{
char data; //顶点信息
int count; //定点入度--没用到可以不写
ArcNode *firstarc; //指向第一条边的指针
}VNode; //顶点
typedef struct{
VNode adjlist[MaxSize]; //邻接表
int n,e; //顶点边数
}AGraph; //图的邻接表类型
//邻接矩阵转邻接表
void AGraphToMGraph(AGraph g1, MGraph &g2){
int i, j;
ArcNode *p;
//复制顶点数和边数
g2.e = g1.e;
g2.n = g1.n;
//初始化边
for(i=0; i<g1.n; ++i)
for(j=0; j<g1.n; ++j){
if(i == j)
g2.edges[i][j] = 0;
else
g2.edges[i][j] = INF;
}
//复制边权值
for(i=0; i<g1.n; ++i){
p = g1->adjlist[i].firstarc; //指向该顶点第一个边
while( p != NULL){
g2.edges[i][p.adjvex] = p.info; //复制权值
p = p.nextarc; //指向下一条边
}
}
}
遍历算法
int visit[MaxSize]; //访问