数据结构—图的存储结构(邻接矩阵)
2016-11-06 14:30
253 查看
邻接矩阵的代码
有向图/无向图
有向网/无向网
图和网的区别只在于边上有没有与边相关联的权值
有向图/无向图
#include<iostream> #include<string> using namespace std; #define MAX_VERTEX_NUM 20 #define INF 0 typedef struct { string vexs[MAX_VERTEX_NUM];//顶点数组.记录顶点的信息 int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//邻接矩阵 int vexnum,arcnum;//顶点个数,边的条数 }Graph; int create_graph(Graph &G) { int i,j; //输入顶点个数和边的条数 cout<<"输入顶点个数:"<<endl; cin>>G.vexnum; cout<<"输入边的条数:"<<endl; cin>>G.arcnum; //将顶点信息保存起来 cout<<"逐行输入图的起始点和终端点:"<<endl; for(i=0;i<G.vexnum;i++) { cin>>G.vexs[i]; } //初始化邻接矩阵,将每条与边相关的信息都设置为INF for(i=0;i<G.vexnum;i++) { for(j=0;j<G.vexnum;j++) { G.arc[i][j]=INF; } } return 1; } int locate(Graph G,string v) { int i; for(i=0;i<G.arcnum;i++) { if(v==G.vexs[i]) return i; } return -1; } //此处存入的是有向图 int deposit(Graph &G) { string v1,v2; int m,n; cout<<"请输入您要存储的顶点信息:"<<endl; for(int i=0;i<G.arcnum;i++) { cin>>v1>>v2; m=locate(G,v1); n=locate(G,v2); G.arc[m] =1; //若要存储无向图,由于无向图的邻接矩阵具 //有对称性,则只需在此处加上 //G.arc [m]=1; } return 1; } void display(Graph G) { cout<<"图的邻接矩阵显示如下:"<<endl; for(int i=0;i<G.vexnum;i++) { for(int j=0;j<G.vexnum;j++) { cout<<G.arc[i][j]<<" "; } cout<<endl; } } int main() { Graph G; //初始化矩阵 if(create_graph(G)) { cout<<"初始化矩阵成功!"<<endl; } //向初始化矩阵中输入要存入的矩阵信息 if(deposit(G)) { cout<<"向矩阵中存储信息成功!"<<endl; } //打印矩阵 display(G); return 0; }
有向网/无向网
#include<iostream> #include<string> using namespace std; #define MAX_VERTEX_NUM 20 #define INF 999 typedef struct { string vexs[MAX_VERTEX_NUM];//顶点数组.记录顶点的信息 int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//邻接矩阵 int vexnum,arcnum;//顶点个数,边的条数 }Graph; int create_graph(Graph &G) { int i,j; //输入顶点个数和边的条数 cout<<"输入顶点个数:"<<endl; cin>>G.vexnum; cout<<"输入边的条数:"<<endl; cin>>G.arcnum; //将顶点信息保存起来 cout<<"请依次输入顶点信息:"<<endl; for(i=0;i<G.vexnum;i++) { cin>>G.vexs[i]; } //初始化邻接矩阵,将每条与边相关的信息都设置为INF for(i=0;i<G.vexnum;i++) { for(j=0;j<G.vexnum;j++) { G.arc[i][j]=INF; } } return 1; } int locate(Graph G,string v) { int i; for(i=0;i<G.arcnum;i++) { if(v==G.vexs[i]) return i; } return -1; } //此处存入的是有向图 int deposit(Graph &G) { string v1,v2; int m,n; int weight; cout<<"请输入您要存储的顶点信息:"<<endl; for(int i=0;i<G.arcnum;i++) { cin>>v1>>v2; cin>>weight; m=locate(G,v1); n=locate(G,v2); G.arc[m] =weight; //若要改为无向网,则只需在此处再加上 //G.arc [m]=weight; } return 1; } void display(Graph G) { cout<<"图的邻接矩阵显示如下:"<<endl; for(int i=0;i<G.vexnum;i++) { for(int j=0;j<G.vexnum;j++) { if(G.arc[i][j]==INF) cout<<"∞"; else cout<<G.arc[i][j]<<" "; } cout<<endl; } } int main() { Graph G; //初始化矩阵 if(create_graph(G)) { cout<<"初始化矩阵成功!"<<endl; } //向初始化矩阵中输入要存入的矩阵信息 if(deposit(G)) { cout<<"向矩阵中存储信息成功!"<<endl; } //打印矩阵 display(G); return 0; }
图和网的区别只在于边上有没有与边相关联的权值
相关文章推荐
- 图的邻接矩阵存储数据结构--自己写数据结构
- 数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 数据结构:图的存储结构之邻接矩阵
- 数据结构:图的邻接矩阵存储实现
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 数据结构之图的存储表示(邻接矩阵、邻接表和边集数组)
- 【数据结构】图的存储--邻接矩阵
- 数据结构之---C语言实现图的数组(邻接矩阵)存储表示
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 数据结构——图—概念和存储(邻接矩阵,邻接表)
- 数据结构之图的邻接矩阵存储方法
- 【数据结构】图的邻接矩阵存储实现
- 数据结构—图的存储—邻接表和邻接矩阵
- 数据结构—图的邻接矩阵存储
- 第十一周 项目一 数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
- 38. 数据结构笔记之三十八图的邻接矩阵存储实现
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 【数据结构】图的存储方式:邻接矩阵和邻接表