测试代码
#include<iostream>
using namespace std;
const int maxsize=4;
int visited[maxsize]={0};
template<class datatype>
class mgraph{
public:
mgraph(datatype a[],int n, int e){
vertexnum=n;
arcnum=e;
int i;
int j;
int k;
for(i=0;i<vertexnum;i++)
vertex[i]=a[i];
for(i=0;i<vertexnum;i++)
for(j=0;j<vertexnum;j++)
arc[i][j]=0;
cout<<"输入邻接矩阵为1的点的坐标:"<<endl;
for(k=0;k<arcnum;k++)
{
cout<<"第"<<k+1<<"个:"<<endl;
cin>>i>>j;
arc[i][j]=1;
arc[j][i]=1;
}
}
void xuzhao(){
int start;
int final;
int v;
int i;
cout<<"请输入起点:";
cin>>start;
cout<<"请输入终点:";
cin>>final;
for(i=0;i<vertexnum;i++)
if(vertex[i]==start)
v=i;
int visit[maxsize]={0};
int data[20];
int front=-1;
int rear=-1;
int j;
int flag=1;
visit[v]=1;
data[++rear]=v;
while(front!=rear&&flag==1)
{
v=data[++front];
for(j=0;j<vertexnum;j++)
if(arc[v][j]==1&&visit[j]==0)
{
if(vertex[j]==final)
{
cout<<"存在!"<<endl;
flag=0;
break;}
visit[j]=1;
data[++rear]=j;
}
}
if(flag==1)
cout<<"不存在!"<<endl;
}
~mgraph(){}
void dfst(int v){
int j;
cout<<vertex[v];
visited[v]=1;
for(j=0;j<vertexnum;j++)
if(arc[v][j]==1&&visited[j]==0)
dfst(j);
}
void bfst(int v){
int visit[maxsize]={0};
int data[20];
int front=-1;
int rear=-1;
int j;
cout<<vertex[v];
visit[v]=1;
data[++rear]=v;
while(front!=rear)
{
v=data[++front];
for(j=0;j<vertexnum;j++)
if(arc[v][j]==1&&visit[j]==0)
{
cout<<vertex[j];
visit[j]=1;
data[++rear]=j;
}
}
}
private:
datatype vertex[maxsize];
int arc[maxsize][maxsize];
int vertexnum,arcnum;
};
int main()
{
int vertex[4]={1,2,3,4};
mgraph<int> a(vertex,4,4);
cout<<"深度优先遍历算法:";
a.dfst(0);
cout<<endl;
cout<<"广度优先算法:";
a.bfst(0);
cout<<endl;
a.xuzhao();
return 0;
}
测试结果