graph's linkMatrix & linkList

本文介绍了一种通过顶点信息构建图的数据结构方法,包括使用邻接矩阵和邻接表两种方式,并提供了完整的C++实现代码。文章首先展示了如何创建邻接矩阵来表示图的结构,接着介绍了基于邻接表的图构建过程,最后实现了深度优先搜索遍历图的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//通过顶点的信息构图 #include<iostream> #include<iomanip> using namespace std; const int SIZE=100; typedef char VertexType; typedef struct vertex{ int adjvex; VertexType data; }VType; typedef struct graph{ int n,e; VType vex[SIZE]; int edges[SIZE][SIZE]; }AdjMatrix; int CreateMatrix(AdjMatrix &g){ int i,j,w; VertexType b,t; cout<<"顶点数(n)和边数(e):"; cin>>g.n>>g.e; for(i=0;i<g.n;++i){ cout<<"序号为"<<i<<"顶点信息:"; cin>>g.vex[i].data; g.vex[i].adjvex=i; }//编号和信息的映射 for(int i=0;i<g.e;++i){ for(int j=0;j<g.e;++j) g.edges[i][j]=0; } for(int k=0;k<g.e;++k){ cout<<"序号为"<<k<<"的边=〉"; cout<<"起点 终点 权值"; cin>>b>>t>>w; i=0; while(i<g.n && g.vex[i].data!=b) ++i; if(i>=g.n){ cout<<"输入的起点不存在!"<<endl; return 0; } j=0; while(j<g.n && g.vex[j].data!=t) ++j; if(j>=g.n){ cout<<"输入终点不存在!"<<endl; return 0; } g.edges[i][j]=w; } return 1; } void DispMatrix(const AdjMatrix g){ int i,j; cout<<endl<<"图的邻接矩阵:"<<endl; for(int i=0;i<g.n;++i){ for(j=0;j<g.n;++j) cout<<setw(3)<<g.edges[i][j]; cout<<endl; } } int main(){ AdjMatrix g; CreateMatrix(g); DispMatrix(g); } #include<iostream> using namespace std; const int SIZE=100; typedef char VertexType; struct Edgenode{//结点的类型 int adjvex;//存放邻接到的点 int value;//权值 struct Edgenode *next; }; struct Vexnode{//表头 VertexType data; Edgenode *firstarc; }; struct Graph{//图 int n,e; Vexnode adjlist[SIZE]; }; int CreateList(Graph *& g){ int b,t,w; Edgenode *p,*q; g=new Graph; cout<<"顶点个数,边数"; cin>>g->n>>g->e; for(int i=0;i<g->n;++i){ cout<<"序号为"<<i<<"的顶点信息:"; cin>>g->adjlist[i].data; g->adjlist[i].firstarc=NULL; } for(int i=0;i<g->e;++i){ cout<<"序号为"<<i<<"边=>"; cout<<"起点序号 终点序号 权值:"; cin>>b>>t>>w; if(b<0 || b>g->n){ cout<<"输入的起点序号不存在!"<<endl; return 0; } if(t<0 || t>g->n){ cout<<"输入的终点序号不存在!"<<endl; return 0; } p=new Edgenode; p->value=w;p->adjvex=t; p->next=g->adjlist[b].firstarc; g->adjlist[b].firstarc=p; //q=new Edgenode;//无向图的始边和终边对称 //q->value=w;q->adjvex=b; //q->next=g->adjlist[t].firstarc; //g->adjlist[t].firstarc=q; } return 1; } void DispAdjList(Graph *g){ Edgenode *p; cout<<"图的邻接表表示如下:"<<endl; for(int i=0;i<g->n;++i){ cout<<"["<<i<<","<<g->adjlist[i].data<<"]=>"; p=g->adjlist[i].firstarc; while(p!=NULL){ cout<<"("<<p->adjvex<<','<<p->value<<")->"; p=p->next; } cout<<"^/n"; } } int visited[SIZE]; void DFS(Graph * g,int vi){ Edgenode *p; visited[vi]=1; cout<<vi<<" "; p=g->adjlist[vi].firstarc; while(p!=NULL){ if(visited[p->adjvex]==0) DFS(g,p->adjvex); p=p->next; } } int main(){ Graph * g; CreateList(g); DispAdjList(g); cout<<"DFS sequence:"; DFS(g,0); } //

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值