数据结构实验6图的有关操作

邻接矩阵实现 

#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;

}

猜你喜欢

转载自blog.csdn.net/sdauguanweihong/article/details/89914972