声明:图片及内容基于https://www.bilibili.com/video/BV1Qf4y1m77B?from=articleDetail
template <class T>
class MGraph {
private:
T *vertex; //顶点信息
int **arc; //邻接矩阵
int vertexNum,arcNum; //顶点数,边数
public:
MGraph(T v[],int n,int e);
~MGraph();
void DFSTraverse(int v);
void BFSTraverse(int v);
void display();
};
template <class T>
MGraph<T>::MGraph(T v[],int n,int e) { //n是顶点数,e是边数
vertexNum=n;
arcNum=e;
vertex = new T[vertexNum]; //建立顶点信息
arc = new int*[vertexNum]; //建立邻接表
for(int i=0; i<vertexNum; i++)
arc[i]=new int[vertexNum];
for(int i=0; i<vertexNum; i++) { //初始化顶点信息
vertex[i]=v[i];
}
for(int i=0;i<vertexNum;i++) //初始化邻接表
for(int j=0;j<vertexNum;j++)
arc[i][j]=0;
int vi,vj;
for(int i=0;i<arcNum;i++){
cout<<"请输入边的两个顶点"<<endl;
cin>>vi>>vj; //输入边依附的两个顶点的编号
arc[vi][vj]=1; //有边标志
arc[vj][vi]=1;
}
}
#include<iostream>
using namespace std;
template <class T>
class MGraph {
private:
T *vertex; //顶点信息
int **arc; //邻接矩阵
int vertexNum,arcNum; //顶点数,边数
public:
MGraph(T v[],int n,int e);
~MGraph();
void DFSTraverse(int v);
void BFSTraverse(int v);
void display();
};
template <class T>
MGraph<T>::MGraph(T v[],int n,int e) { //n是顶点数,e是边数
vertexNum=n;
arcNum=e;
vertex = new T[vertexNum]; //建立顶点信息
arc = new int*[vertexNum]; //建立邻接表
for(int i=0; i<vertexNum; i++)
arc[i]=new int[vertexNum];
for(int i=0; i<vertexNum; i++) { //初始化顶点信息
vertex[i]=v[i];
}
for(int i=0;i<vertexNum;i++) //初始化邻接表
for(int j=0;j<vertexNum;j++)
arc[i][j]=0;
int vi,vj;
for(int i=0;i<arcNum;i++){
cout<<"请输入边的两个顶点"<<endl;
cin>>vi>>vj; //输入边依附的两个顶点的编号
arc[vi][vj]=1; //有边标志
arc[vj][vi]=1;
}
}
template <class T>
void MGraph<T>::display(){
for(int i=0;i<vertexNum;i++){
for(int j=0;j<vertexNum;j++){
cout<<arc[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
// for(int i=0;i<vertexNum;i++){
// for(int j=0;j<vertexNum;j++){
// if(arc[i][j]==1){
// cout<<vertex[i]<<" ";
// }else{
// cout<<" 0 ";
// }
// }
// cout<<endl;
// }
for(int i=0;i<arcNum;i++){
cout<<vertex[i]<<" ";
}
}
template <class T>
MGraph<T>::~MGraph(){
delete []vertex;
for(int i=0;i<vertexNum;i++)
delete [] arc[i];
delete [] arc;
}
int main(){
char* v[4]={"v0","v1","v2","v3"};
MGraph<char*> mgraph(v,4,4);
mgraph.display();
return 0;
}
#include<iostream>
using namespace std;
const int MAX=10;
typedef struct ArcNode{ //边结点
int adjvex;
ArcNode *next;
}ArcNode;
typedef struct { //表头
int vertex;
ArcNode *firstEdge;
}VertexNode[MAX];
class ALGraph{
private:
int vertexNum;
int arcNum;
VertexNode adjList;
public:
ALGraph(int v[],int n,int e);
void display();
};
ALGraph::ALGraph(int v[],int n,int e){
vertexNum=n;
arcNum=e;
for(int i=0;i<vertexNum;i++){
adjList[i].vertex=v[i];
adjList[i].firstEdge=NULL;
}
int vi,vj;
ArcNode *s;
for(int i=0;i<arcNum;i++){
cout<<"请输入第"<<i+1<<"条边的两个顶点在数组中的坐标"<<endl;
cin>>vi>>vj;
s=new ArcNode;
s->adjvex=vj;
s->next=adjList[vi].firstEdge;
adjList[vi].firstEdge=s;
}
}
void ALGraph::display(){
for(int i=0;i<vertexNum;i++){
ArcNode *p=adjList[i].firstEdge;
cout<<adjList[i].vertex;
if(p) cout<<"->";
while(p){
cout<<p->adjvex<<" ";
p=p->next;
if(p) cout<<"->";
}
cout<<endl;
}
}
int main(){
int v[4]={0,1,2,3};
ALGraph algraph(v,4,4);
algraph.display();
return 0;
}
输入:
0 1
0 2
2 3
3 0
输出:
0->2 ->1
1
2->3
3->0
原文:https://www.cnblogs.com/gonghr/p/14585169.html