数据结构-图的创建-c++
在网上找了很多没有找到一个用类c语言写图的,所以这里自己来总结一下。
- 邻接矩阵创建
/*
#include <bits/stdc++.h>
#define maxint 10000
#define maxnum 100
using namespace std;*/
typedef struct
{
int vexs[maxnum];//顶点表
int edges[maxnum][maxnum];//邻接矩阵
int vexnum,arcnum;//图的顶点数和边数
} Graph;
int LocateVex(Graph g,int v1)//查找图的顶点
{
for(int i=0; i<g.vexnum; i++)
if(g.vexs[i]==v1)
return i;
}
void creatUDN(Graph &g)//邻接矩阵的创建
{
int v1,v2,w;
cin>>g.vexnum>>g.arcnum;//进入顶点数和边数
for(int i=0; i<g.vexnum; i++)
cin>>g.vexs[i];//依次输入顶点的值
for(int i=0; i<g.vexnum; i++)
for(int j=0; j<g.vexnum; j++)
g.edges[i][j]=maxint;//初始化极大值,代表无穷大
for(int k=0; k<g.arcnum; k++)
{
cin>>v1>>v2>>w;//进去一条边两端顶点和权值
int i=LocateVex(g,v1);
int j=LocateVex(g,v2);
g.edges[i][j]=g.edges[j][i]=w;//赋值
}
}
2.邻接表创建
下面展示一些 内联代码片
。
//
#include <bits/stdc++.h>
#define maxnum 100// 最大顶点数
using namespace std;
typedef struct ArcNode//边结点类型
{
int adjvex;// 邻接边的位置
int info;// 权值
struct ArcNode *next;
} ArcNode;
typedef struct VNode// 顶点类型
{
int data;//顶点信息
struct ArcNode *firstarc;
} VNode,AdjList[maxnum];//顶点数组
typedef struct //邻接表
{
AdjList vertices;//定义顶点
int vexnum,arcnum;//定义邻接表的顶点数和边数
}ALGraph;
int LocateVex(ALGraph g,int v1)// 定位顶点位置
{
for(int i=0; i<g.vexnum; i++)
if(g.vertices[i].data==v1)
return i;
}
void creat(ALGraph &g) //创建邻接表
{
int v1,v2,w;
cin>>g.vexnum>>g.arcnum;//进入顶点数和边数
for(int i=0;i<g.vexnum;i++)
{
cin>>g.vertices[i].data;//顶点赋值
g.vertices[i].firstarc=NULL;//初始化顶点的指向为空
}
for(int k=0;k<g.arcnum;k++)
{
cin>>v1>>v2>>w;// 进入边的两条定点和权值
int i=LocateVex(g,v1);
int j=LocateVex(g,v2);//定位
ArcNode *p1,*p2;
p1=p2=new ArcNode;
p1->adjvex=j;
p1->info=w;
p1->next=g.vertices[i].firstarc;//头插法p1插到i位置的结点后
g.vertices[i].firstarc=p1;
p2->adjvex=i;
p2->info=w;
p2->next=g.vertices[j].firstarc;
g.vertices[j].firstarc=p2;// 头插法p2插到j位置的结点后
}
}