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

//图的邻接矩阵构造方法,以及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;
}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值