/*
输入格式
0 1
0 2
0 3
2 3
*/
#include <iostream>
using namespace std;
const int maxSize = 10;
class MyGraph
{
public:
MyGraph(int a[],int n,int e);
~MyGraph(){};
void DFSTraverse(int v);
void BFSTraverse(int v);
private:
int vertex[maxSize]; //存放图中顶点的数组
int arc[maxSize][maxSize]; //存放边的数组
int vertexNum,arcNum; //图的顶点数和边数
int* visited; //记录顶点是否访问过
};
MyGraph::MyGraph(int a[],int n,int e)
{
vertexNum = n;
arcNum = e;
visited = new int[maxSize];
for(int i = 0;i < vertexNum;i++)
{
visited[i] = 0;
}
for(int i = 0;i < vertexNum;i++)
{
vertex[i] = a[i];
}
for(int i = 0;i < vertexNum;i++)
{
for(int j = 0;j < vertexNum;j++)
{
arc[i][j] = 0;
}
}
for(int k = 0;k < arcNum;k++)
{
int i,j;
cin >> i >> j;
arc[i][j] = 1;
arc[j][i] = 1;
}
}
void MyGraph::DFSTraverse(int v)
{
cout << vertex[v]; //需要先访问v节点
visited[v] = 1;
for(int i = 0;i < vertexNum;i++)
{
if(arc[v][i] == 1&&visited[i] == 0)
{
DFSTraverse(i);
//不能写在这里,因为第一个访问的不是v节点
//cout << vertex[i];
//visited[i] = 1;
}
}
}
void MyGraph::BFSTraverse(int v)
{
int myqueue[maxSize];
int head = 0,tail = 0;
cout << vertex[v];
visited[v] = 1;
myqueue[tail++] = v;
while(head != tail)
{
v = myqueue[head++];
for(int i = 0;i < vertexNum;i++)
{
if(arc[v][i] == 1&&visited[i] == 0)
{
cout << vertex[i]; //在入队前输出该节点的值
visited[i] = 1;
myqueue[tail++] = i;
}
}
}
}
int main()
{
int a[4] = {0,1,2,3};
MyGraph myGraph(a,4,4);
myGraph.BFSTraverse(1);
return 0;
}
用邻接矩阵构造图并遍历
猜你喜欢
转载自blog.csdn.net/geek_sun/article/details/80498163
今日推荐
周排行