#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);
}
}
}
}
}
}
有向图的深度广度遍历
最新推荐文章于 2024-08-03 21:14:32 发布