[数据结构_3]图的邻接矩阵与邻接表
来源:互联网 发布:中国网络诗歌网新歌词 编辑:程序博客网 时间:2024/06/09 21:24
//完整的图邻接表类型
#define Maxve 6
#define INF 32767
typedef int InfoType;
typedef int Vertex;
typedef struct ANode
{
int adjvex;
struct ANode *nextarc;
InfoType info;
}ArcNode;
typedef struct Vnode
{
Vertex data;
ArcNode *firstarc;
}VNode;
typedef VNode AdjList[Maxve];//AdjList为邻接表类型
typedef struct
{
AdjList adjlist;
int n,e;
}ALGraph;
//MGraph.h
//图邻接矩阵数据类型定义
#define MAXV 6
typedef struct
{
int no;
InfoType info;
} VertexType;
typedef struct
{
int edges[MAXV][MAXV];
int n,e;
VertexType vexs[MAXV];
} MGraph;
//不带权图
//1.邻接矩阵转换为邻接表算法
//2.邻接表转换为邻接矩阵算法
#include"ALGraph.h"
#include"MGraph.h"
#include<malloc.h>
#include<stdio.h>
extern void DispMat(MGraph g);
extern void DispAdj(ALGraph *G);
//邻接矩阵转换为邻接表算法
void MatToList(MGraph g,ALGraph *&G)
{
int i,j;
ArcNode *p;
G=(ALGraph *)malloc(sizeof(ALGraph));
for(i=0;i<g.n;i++)
G->adjlist[i].firstarc=NULL;
for(i=0;i<g.n;i++)
for(j=g.n-1;j>=0;j--)
{
if(g.edges[i][j]!=0)
{
p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=j;
p->nextarc=G->adjlist[i].firstarc;
G->adjlist[i].firstarc=p;
}
}
G->n=g.n;
G->e=g.e;
}
//邻接表转换为邻接矩阵算法
void ListToMat(ALGraph *G,MGraph &g)
{
int i;
ArcNode *p;
for(i=0;i<G->n;i++)
{
p=G->adjlist[i].firstarc;
while(p!=NULL)
{
g.edges[i][p->adjvex]=1;
p=p->nextarc;
}
}
g.n=G->n;
g.e=G->e;
}
//输出邻接矩阵g
void DispMat(MGraph g)
{
int i,j;
for(i=0;i<g.n;i++)
{
for(j=0;j<g.n;j++)
if(g.edges[i][j]==INF)//怎样存储无穷大
printf("%3s","∞");
else
printf("%3d",g.edges[i][j]);
printf("\n");
}
}
//输出邻接表G
void DispAdj(ALGraph *G)
{
int i;
ArcNode *p;
for(i=0;i<G->n;i++)
{
p=G->adjlist[i].firstarc;
printf("%3d: ",i);
while(p!=NULL)
{
printf("%3d(%d)",p->adjvex,p->info);
p=p->nextarc;
}
printf("\n");
}
}
void main()
{
int i,j;
ALGraph *G;
MGraph g;
g.n=6;
g.e=10;
int A[6][6]={
{0,5,INF,7,INF,INF},
{INF,0,4,INF,INF,INF},
{8,INF,0,INF,INF,9},
{INF,INF,5,0,INF,6},
{INF,INF,INF,5,0,INF},
{3,INF,INF,INF,1,0}};
for(i=0;i<6;i++)
for(j=0;j<6;j++)
g.edges[i][j]=A[i][j];
printf("输出有向图邻接矩阵为:\n");
DispMat(g);
G=(ALGraph*) malloc(sizeof(ALGraph));
printf("有向图邻接矩阵g转换为邻接表G为:\n");
MatToList(g,G);
DispAdj(G);
printf("有向图邻接表G转换为邻接矩阵g为:\n");
ListToMat(G,g);
DispMat(g);
}
//带权图
//1.邻接矩阵转换为邻接表算法
//2.邻接表转换为邻接矩阵算法
#include"ALGraph.h"
#include"MGraph.h"
#include<malloc.h>
#include<stdio.h>
//邻接矩阵转换为邻接表算法
void MatToList(MGraph g,ALGraph *&G)
{
int i,j;
ArcNode *p;
G=(ALGraph *)malloc(sizeof(ALGraph));
for(i=0;i<g.n;i++)
G->adjlist[i].firstarc=NULL;
for(i=0;i<g.n;i++)
for(j=g.n-1;j>=0;j--)
{
if(g.edges[i][j]!=0)
{
p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=j;
p->info=g.edges[i][j];
p->nextarc=G->adjlist[i].firstarc;
G->adjlist[i].firstarc=p;
}
}
G->n=g.n;
G->e=g.e;
}
//邻接表转换为邻接矩阵算法
void ListToMat(ALGraph *G,MGraph &g)
{
int i;
ArcNode *p;
for(i=0;i<G->n;i++)
{
p=G->adjlist[i].firstarc;
while(p!=NULL)
{
g.edges[i][p->adjvex]=p->info;
p=p->nextarc;
}
}
g.n=G->n;
g.e=G->e;
}
//输出邻接矩阵g
void DispMat(MGraph g)
{
int i,j;
for(i=0;i<g.n;i++)
{
for(j=0;j<g.n;j++)
if(g.edges[i][j]==INF)//怎样存储无穷大
printf("%3s","∞");
else
printf("%3d",g.edges[i][j]);
printf("\n");
}
}
//输出邻接表G
void DispAdj(ALGraph *G)
{
int i;
ArcNode *p;
for(i=0;i<G->n;i++)
{
p=G->adjlist[i].firstarc;
printf("%3d: ",i);
while(p!=NULL)
{
if(p->info!=INF)
printf("%3d(%d)",p->adjvex,p->info);
p=p->nextarc;
}
printf("\n");
}
}
void main()
{
int i,j;
ALGraph *G;
MGraph g;
g.n=6;
g.e=10;
int A[6][6]={
{0,5,INF,7,INF,INF},
{INF,0,4,INF,INF,INF},
{8,INF,0,INF,INF,9},
{INF,INF,5,0,INF,6},
{INF,INF,INF,5,0,INF},
{3,INF,INF,INF,1,0}};
for(i=0;i<6;i++)
for(j=0;j<6;j++)
g.edges[i][j]=A[i][j];
printf("输出有向图邻接矩阵为:\n");
DispMat(g);
G=(ALGraph*) malloc(sizeof(ALGraph));
printf("有向图邻接矩阵g转换为邻接表G为:\n");
MatToList(g,G);
DispAdj(G);
printf("有向图邻接表G转换为邻接矩阵g为:\n");
ListToMat(G,g);
DispMat(g);
}
- [数据结构_3]图的邻接矩阵与邻接表
- 数据结构 图的存储邻接矩阵与邻接链表
- 《数据结构》C++代码 邻接表与邻接矩阵
- 数据结构,图的邻接矩阵创建,邻接矩阵与邻接表的交换,两种表的输出,过程用C++实现
- 数据结构与算法之图的邻接表与邻接矩阵<十二>
- 数据结构基础 之 图 的 邻接矩阵实现与邻接表实现
- 数据结构--图之邻接矩阵&邻接表&图的遍历
- 数据结构(14):图的存储方式(邻接矩阵、邻接表....)
- 数据结构—图的存储—邻接表和邻接矩阵
- 邻接矩阵与邻接表
- 算法导论--图的存储(邻接表与邻接矩阵)
- 图的遍历与输出 (邻接矩阵和邻接表)
- 图 邻接矩阵 邻接表
- 数据结构(C语言版)规范代码之图(邻接矩阵与邻接表)
- 图的邻接表和邻接矩阵
- 图的邻接表和邻接矩阵
- 图的邻接矩阵和邻接表
- 图的邻接表和邻接矩阵
- Google BigTable介绍
- HDU 1007 Quoit Design 分治法
- 用State模式减少if..elseif语句
- InetAddress.getLocalHost()详解
- 如何使用DirectShow播放一个文件
- [数据结构_3]图的邻接矩阵与邻接表
- 11.2 职员有薪水了
- win8+ubuntu双系统引导出现问题怎么办
- 做网页设计,应该如何发展?
- Bluehost 主机部署Django网站时MemoryError at / No exception supplied问题及解决方案
- 内外网互通,内外网数据交换,全端口映射的技术原理与实际使用方法
- 把一个动态库改成静态编译库时提示MSVCRTD.lib已经在××中编译过的错误的解决办法
- 大精度问题(java)
- linux下设备device_register和驱动driver_register先后注册的影响和关系