图的邻接矩阵
Posted 梦西空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的邻接矩阵相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h> //邻接矩阵
const int MAX1=20; //顶点最大值
const int MAX2=101; //矩阵最大阶数
const int MAX3=101; //队列最大容量
using namespace std;
typedef char typelem;
typedef int Edgetype;
typedef struct
typelem G_node[MAX1];//结点
int n,e;//n为结点数,e为边数
Edgetype edge[MAX2][MAX2];//邻接矩阵
int Typegraph;//图的类型,1为有向图,2为无向图
G_raph;
//队列
typedef struct
int data[MAX2];
int top;
int rear;
listqueue;
int enqueue(listqueue *p,int e)//入列
p->data[p->rear]=e;
p->rear=(p->rear+1)%MAX3;
return 0;
int outqueue(listqueue *p,int &i)
i=p->data[p->top];
p->top=(p->top+1)%MAX3;
return 0;
//图的创建
void Graphcreate(G_raph *G)
int i,j,t;
cout<<"输入图的类型(1为有向图,2为无向图):";cin>>G->Typegraph;
cout<<"输入结点数:";cin>>G->n;
cout<<"输入边数:";cin>>G->e;
cout<<"结点赋值:";G->G_node[0]=0;
for(i=1;i<=G->n;i++)
cin>>G->G_node[i];
cout<<"矩阵(输入n条边,一共n行,\\"i j\\"表示第i行第j列):\\n";
for(i=0;i<=G->n;i++)
for(j=0;j<=G->n;j++)
G->edge[i][j]=0;
if(G->Typegraph==2)
for(t=0;t<G->e;t++)
cin>>i>>j;
G->edge[i][j]=1;
G->edge[j][i]=1;
else
for(t=0;t<G->e;t++)
cin>>i>>j;
G->edge[i][j]=1;
//打印图的信息
void print(const G_raph &G)
int i,j;
cout<<"结点信息:";
for(i=1;i<=G.n;i++)
cout<<G.G_node[i];
cout<<"\\n边信息:";
for(i=1;i<=G.n;i++)
for(j=1;j<=G.n;j++)
if(G.edge[i][j])
if(G.Typegraph==1)
printf("<%c,%c> ",G.G_node[i],G.G_node[j]);
else
printf("(%c,%c) ",G.G_node[i],G.G_node[j]);
cout<<'\\n';
//深度优先遍历,起始点地址为t
void Findgraph(const G_raph *G,int t,int *le)
cout<<G->G_node[t];
le[t]=1;
for(int i=1;i<=G->n;i++)
if(G->edge[t][i]==1&&le[i]==0)
Findgraph(G,i,le);
return;
//广度优先遍历,i为初始访问的地址
void Find_graph(const G_raph *G,int t,int *le)
int i,j;
listqueue *p=new listqueue;p->rear=p->top=0;//队列初始化
cout<<G->G_node[t]; le[t]=1;//访问结点
enqueue(p,t);//入列
while(p->rear!=p->top)
outqueue(p,t);
for(i=1;i<=G->n;i++)
if(G->edge[t][i]==1&&le[i]==0)
cout<<G->G_node[i];le[i]=1;//访问结点
enqueue(p,i);//入列
int main()
G_raph G;
Graphcreate(&G);
print(G);
int le[G.n+1]=0;
cout<<"遍历结果:";
Find_graph(&G,1,le);
以上是关于图的邻接矩阵的主要内容,如果未能解决你的问题,请参考以下文章
编程实现以邻接表或邻接矩阵为存储结构,图的广度和深度优先搜索
图的基本概念,图的存储--邻接矩阵、邻接表、十字链表、邻接多重表