邻接矩阵和邻接表表示

这首诗看了很是触动,转载一下。



//风雨难洗心痕,沧桑不灭情伤。莫要轻言亘古,离散才看荒凉。

#include "iostream"
using namespace std;


typedef char Vertextype;  //顶点
typedef int EdgeType;  //边的权值
#define MAXVEX 100
#define INFINITY 65535


//邻接矩阵
typedef struct  
{
Vertextype vexs[MAXVEX];  //顶点表
EdgeType arc[MAXVEX][MAXVEX];//邻接矩阵,可以看做边表
int numvertexes, numEdges;  //当前的顶点和边数
}MGraph;


//邻接表
typedef struct EdgeNode  //边表结点
{
int adjvex;//邻接顶点
EdgeType weight;  //存储权值
struct EdgeNode *next;//用来指向下一个邻接点
}EdgeNode;


typedef struct VertexNode  //顶点表结点
{
Vertextype data;//顶点
EdgeNode *firstedge;//边表头指针
}VertexNode, AdjList[MAXVEX];


typedef struct
{
AdjList adjList;
int numVertexes, numEdges;//当前的顶点和边
}GraphAdjList;




void CreateALGraph(GraphAdjList *G)
{
int i, j, k;
EdgeNode *e;
printf("输入顶点数和边数:\n");
scanf("%d,%d"&G->numVertexes, &G->numEdges);//读入顶点和边数
for ( i = 0; i < G->numVertexes; i++)
{
scanf(&G->adjList[i].data);//读入顶点信息
G->adjList[i].firstedge = NULL;//边表指针置为空
}
for ( k = 0; k < G->numEdges; k++)//建立边表
{
printf("输入边[vi,vj]上的顶点序号");
scanf("%d,%d", &i, &j);//输入边[vi,vj]上的顶点序号




e = (EdgeNode *)malloc(sizeof(EdgeNode));


e->adjvex = j;//邻接序号为j
e->next = G->adjList[i].firstedge;
G->adjList[i].firstedge = e;


e = (EdgeNode *)malloc(sizeof(EdgeNode));


e->adjvex = i;//邻接序号为i
e->next = G->adjList[j].firstedge;          //一条边对应都是两个顶点,所以再循环中,一次就针对i和j分别进行了插入
G->adjList[j].firstedge = e;               //e的下一个指向顶点表的另一个邻接点,或者变成NULL
}
}



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++)
for ( j = 0; j < G->numvertexes; j++)
{
G->arc[i][j] = INFINITY;  //矩阵初始化
}
for (k = 0; k < G->numvertexes; 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]
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章