鄰接矩陣和鄰接表表示

這首詩看了很是觸動,轉載一下。



//風雨難洗心痕,滄桑不滅情傷。莫要輕言亙古,離散纔看荒涼。

#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]
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章