(c++)数据结构与算法之图:邻接矩阵、深度广度遍历、构造最小生成树(prim、kruskal算法)

//图的邻接矩阵实现
//广度遍历bfs和深度遍历dfs
//构造最小生成树的prim、kruskal算法

#include 
#include
#include
#define WEIGHTMAX  100
#define VERTEXMAX 50
#define VISITED 1
#define UNVISITED 0
using namespace std;
class ufset             //等价类
{
private:
    int n;                      //个数
    int *root,*next,*length;    //等价类代表元、下一个元素、该元素所在等价类的元素个数
public:
    friend class graph;
    ufset(int s)                //初始时均各自为等价类
    {
        root=new int[s];
        next=new int[s];
        length=new int[s];
        n=s;
        for(int i=0;i";
}
class graph
{
private:
    int **matrix;           //邻接矩阵
    int v_num,e_num;        //结点数、边数
    int *mark;              //用于判断是否被访问的数组(0:未访问  1:已访问 )
public:
    graph(){};
    graph(int v)
    {
        if(v>=VERTEXMAX)    cout<<"construct false"<0&&
           matrix[onee.start][onee.end]0&&
           matrix[onee.end][onee.start]";
        for(int i=0;i=1&&!mark[i])
                dfs_traverse(g,i);
        }
    }
    void dfs_notraverse()               //非递归深度遍历(用栈实现)
    {
        resetMark();
        stack s;
        for(int i=0;i0;j--)
                    //for(int j=0;j0&&matrix[pc][j] q;
        for(int i=0;i=0;j--)                 //?????
                    {
                        if(matrix[pc][j]>0&&matrix[pc][j]matrix[ver[i]][j]
                       &&mark[j]==0)
                    {
                        minWeight=matrix[ver[i]][j];
                        sta=ver[i];
                        en=j;
                    }
                }
            }
            edge temp(sta,en,minWeight);
            e[x++]=temp;
            ver[y++]=en;
            mark[en]=1;
        }
        {//展示结果:
            cout<<"插入边顺序: "<"< q;
        ufset ufs(n);
        {//遍历使所有边按权重从小到大的顺序排成数组,进队
            edge eq[e_num];
            int x=0;
            int **edgew=new int*[n];
            edgew=matrix;
            while(x<+e_num)
            {
                for(int i=0;iminweight)
                        {
                            minweight=eq[j].weight;
                            edge temp;
                            temp=eq[j];
                            eq[j]=eq[i];
                            eq[i]=temp;
                        }
                    }
            }
            for(int i=0;i"<
第一次写,写的比较复杂,将就看吧。

你可能感兴趣的:(数据结构与算法)