图的邻接矩阵建立以及遍历方法

//图的邻接矩阵构造方法,以及DFS,BFS操作;

#include<stdio.h>
#include<string.h>
#include<queue>

using namespace std;

#define Max 20
int visited[20];

typedef struct 
{
	char vex[Max];
	int vexs[Max][Max];
	int vexnum,arcnum;
}MGraph;

int Loca(MGraph &G,char ch)
{
	int i;
	for(i=0;i<G.vexnum;i++)
	{
		if(ch==G.vex[i])
			return i;
	}
		return -1;
}


void Creat_vex(MGraph &G)
{
	int i,j;
	int la1,la2;
	char ch1,ch2;
	scanf("%d%d",&G.vexnum,&G.arcnum);
	for(i=0;i<G.vexnum;i++)
	{
		getchar();
		scanf("%c",&G.vex[i]);
	}
	for(i=0;i<G.vexnum;i++)
		for(j=0;j<G.vexnum;j++)
			G.vexs[i][j]=0;
	for(i=0;i<G.arcnum;i++)
	{
		getchar();
		scanf("%c %c",&ch1,&ch2);
		la1=Loca(G,ch1);	
		la2=Loca(G,ch2);
		G.vexs[la1][la2]=1;
		G.vexs[la2][la1]=G.vexs[la1][la2];
	}
	for(i=0;i<G.vexnum;i++)
	{
		for(j=0;j<G.vexnum;j++)
			printf("%d  ",G.vexs[i][j]);
		putchar ('\n');
	}
	
	
}

void DFS(MGraph G,int v)
{
	visited[v]=1;
	printf("%c ",G.vex[v]);
	for(int i=0;i<G.vexnum;i++)
	{
		if(!visited[i]&&G.vexs[v][i])
			DFS(G,i);	
	}
}

void DFS_Travel(MGraph G)
{
	int v;
	for(v=0;v<G.vexnum;v++)
		visited[v]=0;
	for(v=0;v<G.vexnum;v++)
		if(!visited[v])
			DFS(G,v);
}

void BFS_Travel(MGraph G)
{
	queue<char>Q;
	int i,j,k;
	char ch;
	for(i=0;i<G.vexnum;i++)
	{
		if(!visited[i])
		{
			visited[i]=1;
			printf("%c ",G.vex[i]);
			Q.push(G.vex[i]);
			while(!Q.empty())
			{
				ch=Q.front();
				Q.pop();
				k=Loca(G,ch);
				for(j=0;j<G.vexnum;j++)
				{
					if(!visited[j]&&G.vexs[k][j])
					{
						visited[j]=1;
						printf("%c ",G.vex[j]);
						Q.push(G.vex[j]);
					}
				}
			}
		}
	}

}

int main()
{
	MGraph G;
	Creat_vex(G);
	DFS_Travel(G);
	memset(visited,0,sizeof(visited));
	putchar('\n');
	BFS_Travel(G);
	putchar('\n');

	return 0;
}

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/oliver233/article/details/49453825
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞