邻接矩阵实现
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
const int maxsize=10;
using namespace std;
int vis[10];
template<class DataType>
class MGraph
{private:
DataType vertex[maxsize];
int arc[maxsize][maxsize];
int vertexNum,arcNum;
public:
MGraph(DataType a[],int n,int e);
~MGraph(){}
void DFS(int v);
void BFS(int v);
};
template<class DataType>
MGraph<DataType>::MGraph(DataType a[],int n,int e)
{vertexNum=n;
arcNum=e;
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 x,y;
cin>>x>>y;
arc[x][y]=arc[y][x]=1;
}
}
template<class DataType>
void MGraph<DataType>::DFS(int v)
{
cout<<vertex[v]<<" ";
vis[v]=1;
for(int j=0;j<vertexNum;j++)
if(arc[v][j]==1&&vis[j]==0)
DFS(j);
}
template<class DataType>
void MGraph<DataType>::BFS(int v)
{
int front=-1;
int rear=-1;
int q[20];
cout<<vertex[v]<<" ";
vis[v]=1;
q[++rear]=v;
while(front!=rear)
{
v=q[++front];
for(int j=0;j<vertexNum;j++)
{
if(arc[v][j]==1&&!vis[j])
{
cout<<vertex[j]<<" ";
vis[j]=1;
q[++rear]=j;
}
}
}
}
int main()
{int a[20];
for(int i=0;i<6;i++)
a[i]=i;
MGraph<int> mg(a,6 ,6);
memset(vis,0,sizeof(vis));
mg.DFS(0);
cout<<endl;
memset(vis,0,sizeof(vis));
mg.BFS(0);
}
邻接表实现(有bug待改)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxsize=10;
int vis[maxsize];
struct ArcNode
{int adjvex;
ArcNode*next;
};
template <class DataType>
struct VertexNode
{
DataType vertex;
ArcNode*firstedge;
};
template<class DataType>
class ALGraph
{public:
ALGraph(DataType a[],int n,int e);
void DFS(int v);
void BFS(int v);
private:
VertexNode<DataType> adjlist[maxsize];
int vertexNum,arcNum;
};
template<class DataType>
ALGraph<DataType>::ALGraph(DataType a[],int n,int e)
{
vertexNum=n;
arcNum=e;
ArcNode*s;
for(int i=0;i<vertexNum;i++)
{
adjlist[i].vertex=a[i];
adjlist[i].firstedge=NULL;
}
for(int k=0;k<arcNum;k++)
{
int x,y;
cin>>x>>y;
s=new ArcNode;
s->adjvex=y;
s->next=adjlist[x].firstedge;
adjlist[x].firstedge=s;
}
};
template<class DataType>
void ALGraph<DataType>::DFS(int v)
{
cout<<adjlist[v].vertex;
vis[v]=1;
ArcNode*p;
p=adjlist[v].firstedge;
while(p!=NULL)
{
int j=p->adjvex;
if(vis[j]==0)
DFS(j);
p=p->next;
}
}
template<class DataType>
void ALGraph<DataType>::BFS(int v)
{
int front=-1;
int rear=-1;
int q[maxsize];
cout<<adjlist[v].vertex;
vis[v]=1;
ArcNode*p;
q[++rear]=v;
while(front!=rear)
{
v=q[++front];
p=adjlist[v].firstedge;
while(p!=NULL)
{
int j=p->adjvex;
if(!vis[j])
{
cout<<adjlist[j].vertex;
vis[j]=1;
q[++rear]=j;
}
p=p->next;
}
}
}
int main()
{
int a[20];
for(int i=0;i<6;i++)
a[i]=i;
memset(vis,0,sizeof(vis));
ALGraph<int>ag(a,6,6);
ag.DFS(0);
cout<<endl;
memset(vis,0,sizeof(vis));
ag.BFS(0);
return 0;
}