【加群獲取學習資料QQ群:901381280】
分析:通過將鄰接表的邊映射到鄰接矩陣上為1,沒邊的則為0
#include<iostream>
using namespace std;
#define MaxNum 20 //圖的最大頂點數
#define MaxValue 65535 //最大值
// 定義邊表結點
struct ArcNode
{
int adjvex; // 鄰接點域
ArcNode* next; //下一個鄰接點
};
struct Graph
{
struct ArcNode* VertexNode[MaxNum]; //定義頂點表結點
int VertextNum; //頂點數量
int EdgeNum; //邊的數量
int Edge[MaxNum][MaxNum]; //鄰接矩陣
};
void outAdjacency(Graph GM){ //輸出鄰接表
for(int i=1;i<=GM.VertextNum;i++){//定義頂點表結點
ArcNode* B = new ArcNode;
B= GM.VertexNode[i];
cout << B->adjvex;
B = B->next;
while(B!=nullptr){
cout << "->"<<B->adjvex;
B = B->next;
}
cout << "->Null"<<endl;
}
}
void adjacency_matrix(Graph GM){ //輸出鄰接矩陣
for(int i=1;i<=GM.VertextNum;i++){//定義頂點表結點
ArcNode* B = new ArcNode;
B= GM.VertexNode[i];
B = B->next;
while(B!=nullptr){
GM.Edge[i][B->adjvex]=1;
B = B->next;
}
}
for(int i=1;i<=GM.VertextNum;i++){ //打印鄰接矩陣
for(int j=1;j<=GM.VertextNum;j++){
cout << GM.Edge[i][j] << " ";
}
cout << endl;
}
}
int main(){
Graph GM; //初始化圖
cin>>GM.VertextNum; //輸入頂點數量
cin>>GM.EdgeNum; //入邊的數量
for(int i=1;i<=GM.VertextNum;i++){//定義頂點表結點
ArcNode* A = new ArcNode;
A->adjvex=i;
A->next=nullptr;
GM.VertexNode[i]=A;
}
for(int i=1;i<=GM.EdgeNum;i++){
int j,k;
cin >>j >>k ;
ArcNode* A = new ArcNode;
A->adjvex=k;
A->next=GM.VertexNode[j]->next;
GM.VertexNode[j]->next = A;
}
for(int i=1;i<=GM.VertextNum;i++){ //初始化鄰接矩陣 為0;
for(int j=1;j<=GM.VertextNum;j++){
GM.Edge[i][j]=0;
}
}
cout << "輸出鄰接表"<<endl;
outAdjacency(GM); //輸出鄰接表
cout << "輸出鄰接矩陣"<<endl;
adjacency_matrix(GM); //輸出鄰接矩陣
return 0;
}
輸入:
4 5
1 4
4 3
1 2
2 4
1 3
輸出結果:
歡迎關注公眾號:Python爬蟲數據分析挖掘,方便及時閱讀最新文章
回復【開源源碼】免費獲取更多開源項目源碼;