有向图的深度广度遍历

#include<iostream>
#include<queue>
using namespace std;
// 用邻接矩阵完成
#define maxint 32767  // 表示没有路径的弧
#define  mnum 100   // 最多定点数
#define queue_size 100
typedef struct
{
	char vexs[mnum];
	int arcs[mnum][mnum];
	int vexnum;
	int arcnum;
}Graph;
int locate(Graph G, char a);
Graph Create();
void dfs(int a,int visit[], Graph G);
void bfs(int a,Graph G);
int main(void)
{
	Graph G = Create();
	int visit[maxint] = { 0 };
	dfs(1, visit, G);
	cout << endl;
	bfs(1, G);
	system("pause");
	return 0;
}
int locate(Graph G, char a)
{
	for (int i = 1; i <= G.vexnum; i++)
	{
		if (G.vexs[i] == a)
			return i;
	}
	return 0;
}
Graph Create()
{
	Graph G ;
	cin>>G.vexnum>>G.arcnum; // 顶点和边数
	for (int i = 1; i <= G.vexnum; i++)
	{
		cin>>G.vexs[i];
	}
	for (int i = 1; i <= G.vexnum; i++)
		for (int j = 1; j <= G.vexnum; j++)
			G.arcs[i][j] = maxint;
	for (int i = 0; i < G.arcnum; i++)
	{
		string s = "";
		cin>>s;
		int k = locate(G, s[0]);
		int f = locate(G, s[1]);
		G.arcs[k][f] = 1;
	}
	return G;
}
void dfs(int a, int visit[], Graph G)
{
	cout<<G.vexs[a];
	visit[a] = 1;
	for (int i = 1; i <= G.vexnum; i++)
	{
		if (G.arcs[a][i] != maxint && visit[i] == 0)
		{
			dfs(i, visit, G);
		}
	}
}
void bfs(int a, Graph G)
{
	int visit[maxint] = { 0 };
	queue<int> q;
	for (int i = 1; i <= G.vexnum; i++)
	{
		if (!visit[i])
		{
			visit[i] = 1;
			cout << G.vexs[i];
			q.push(i);
			while (!q.empty())
			{
				int v = q.front();
				q.pop();
				for (int i = 1; i <= G.vexnum; i++)
				{
					if (G.arcs[v][i] == 1&& visit[i] == 0)
					{
						visit[i] == 1;
						cout << G.vexs[i];
						q.push(i);
					}
				}
			}
		}
	}
}

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值