图的各种算法

这篇博客主要探讨了图的各种算法,适合找工作时进行算法复习。内容涵盖图的基本概念、路径搜索和图的结构操作等。
摘要由CSDN通过智能技术生成

找工作时当练习写的,仅供参考。

头文件:

 
#ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED
#define Max 10000
//adjacent matrix
class MGraph{
    private:
        int TotVer;
        vector<int> Vertics;
        vector<vector<int> > Edge;
    public:
        MGraph(){ }
        MGraph(int t):TotVer(t){
            //read vertics
            cout<<"read vertics"<<endl;
            int v;
            for(int i=0;i<t;++i){
                cin>>v;
                Vertics.push_back(v);
            }
            //read edges
            cout<<"read edges"<<endl;
            Edge.resize(t);
            for(int i=0;i<t;++i)
                Edge[i].resize(t,0);
            for(int i=0;i<t;++i)
                for(int j=0;j<t;++j)
                    if(i!=j) Edge[i][j]=Max;
            int i,j,cur;
            while(cin>>i>>j>>cur){
                if(i==-1&&j==-1&&cur==-1) break;
                if(i!=j) Edge[i][j]=Edge[j][i]=cur;
            }
        }


        int GetTotVec(){
            return TotVer;
        }
        vector<int>& GetVertics(){
            return Vertics;
        }
        vector<vector<int> >& GetEdge(){
            return Edge;
        }


         void Dijkstra(int);
         void Floyd();
};
//adjacent table
struct Edge{
    int dest;
    int cost;
    Edge* next;
    Edge(int d,int c):dest(d),cost(c),next(NULL){ }
};
struct Vertex{
    int data;
    Edge* adj;
    Vertex():data(0),adj(NULL){ }
};
struct MSTNode{
    int tail,head;
    int cost;
};
class AGraph{
    private:
        int TotVer;
        int TotEdge;
        vector<Vertex> NodeTable;
    public:
        AGraph(){ }
        AGraph(int t,int e):TotVer(t),TotEdge(e){
            int d;
            int tail,head,cost;
            Edge* cure;
            //read vertics
            cout<<"read vertics"<<endl;
            NodeTable.resize(t);
            for(int i=0;i<t;++i){
                cin>>d;
                NodeTable[i].data=d;
            }
            //read edges
            cout<<"read edges"<<endl;
            for(int i=0;i<e;++i){
                cin>>tail>>head>>cost;
                int k=0;
                while(k!=tail) ++k;
                cure=NodeTable[k].adj;
                if(cure==NULL) NodeTable[k].adj=new Edge(head,cost);
                else{
                    while(cure->next!=NULL) cure=cure->next;
                    cure->next=new Edge(head,cost);
                }


                /*k=0;
                while(k!=head) ++k;
                cure=NodeTable[k].adj;
                if(cure==NULL) NodeTable[k].adj=new Edge(tail,cost);
                else{
             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值