/*图遍历_邻接矩阵*/
#include <iostream>
#include <stdlib.h>
#include <queue>
using namespace std;
//邻接矩阵
int adj[10][10];
int visit[10];
int vetexNum, edgeNum;
//深度优先搜索,每拿到一个节点,就往其深处继续访问,知道不能继续
//往下延伸为止,返回深一层
void DFS(int v)
{
visit[v] = 1;
cout << v << endl;
for(int i = 0; i<vetexNum; i++)
{
if(adj[v][i] == 1 && visit[i] == 0)
DFS(i);
}
}
//图的广度优先搜索
//建立一个队列,把每一层的节点分别放进队列中。然后依次访问队列头
//并把头弹出。。。s
void BFS(int v)
{
queue<int> q;
visit[v] = 1;
cout << v << endl;
q.push(v);
while(!q.empty())
{
int current = q.front();
q.pop();
for(int i=0; i<vetexNum; i++)
{
if(adj[current][i] == 1 && visit[i] == 0)
{
visit[i] = 1;
q.push(i);
cout << i << endl;
}
}
}
}
int main()
{
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
while(cin >> vetexNum >> edgeNum)
{
memset(visit,0,sizeof(visit));
memset(adj,0, sizeof(adj));
for(int i=1; i<=edgeNum; i++)
{
int start, end;
cin >> start >> end;
adj[start][end] = 1;
adj[end][start] = 1;
}
cout << "深度优先搜索"<< endl;
DFS(1);
cout << endl;
memset(visit,0,sizeof(visit));
cout << "广度优先搜索"<< endl;
BFS(0);
}
system("pause");
return 0;
}
图遍历_邻接矩阵
最新推荐文章于 2024-03-31 20:25:49 发布