图的邻接矩阵

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);


以上是关于图的邻接矩阵的主要内容,如果未能解决你的问题,请参考以下文章

数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)

图的基本概念;图的邻接矩阵和邻接表存储结构

编程实现以邻接表或邻接矩阵为存储结构,图的广度和深度优先搜索

图的基本概念,图的存储--邻接矩阵、邻接表、十字链表、邻接多重表

用c语言编程 1创建图的邻接矩阵和邻接表 2验证图的深度优先、广度优先遍历算法 3验证最短路径

【数据结构】怎么把图的邻接表表示转化为图的邻接矩阵表示?