• Graphmtx


    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    const int DefaultVertices=100;
    const int maxWeight=1000;
    typedef int E;
    typedef char T;
    class Graphmtx{
    private:
        T *VerticesList;
        E **Edge;
        int numVertices;
        int maxVertices;
        int numEdge;
        int gtVertexPos(T vertex){
            for(int i=0;i<numVertices;i++){
                if(VerticesList[i]==vertex)
                    return i;
            }
            return -1;
        }
    public:
        Graphmtx(int sz=DefaultVertices);
        ~Graphmtx(){
            delete []VerticesList;
            delete []Edge;
        }
        T getValue(int i){
            if(i>=0&&i<numVertices){
                return VerticesList[i];
            }
            else{
                cout<<"error"<<endl;
                exit(1);
            }
        }
        E getWeight(int v1,int v2){
            return (v1>-1&&v2>-1)?Edge[v1][v2]:0;
        }
        int getFirstNeighbor(int v);
        int getNectNeighbor(int v,int w);
        bool insertVertex(const T vertex);
        bool removeVertex(int v);
        bool insertEdge(int v1,int v2,E cost);
        bool removeEdge(int v1,int v2);
    };
    Graphmtx::Graphmtx(int sz){
        maxVertices=sz;
        numVertices=0;
        numEdge=0;
        int i,j;
        VerticesList=new T[maxVertices];
        Edge=new E*[maxVertices];
        for(i=0;i<maxVertices;i++){
            Edge[i]=new E[maxVertices];
        }
        for(i=0;i<maxVertices;i++){
            for(j=0;j<maxVertices;j++){
                Edge[i][j]=((i==j)?0:maxWeight);
            }
        }
    }
    int Graphmtx::getFirstNeighbor(int v){
        if(v>-1){
            for(int col=0;col<numVertices;col++){
                if(Edge[v][col]&&Edge[v][col]<maxWeight)
                    return col;
            }
        }
        return -1;
    }
    int Graphmtx::getNectNeighbor(int v,int w){
        if(v>-1&&w>-1){
            for(int col=w+1;col<numVertices;col++)
                if(Edge[v][col]&&Edge[v][col]<maxWeight)
                    return col;
        }
        return -1;
    }
    bool Graphmtx::insertVertex(const T vertex){
        if(numVertices==maxVertices)
            return false;
        VerticesList[numVertices++]=vertex;
        return true;
    }
    bool Graphmtx::removeVertex(int v){
        if(v<0||v>=numVertices){
            cout<<"error"<<endl;
            return false;
        }
        if(numVertices==1)
            return false;
        int i,j;
        VerticesList[v]=VerticesList[numVertices-1];
        for(i=0;i<numVertices;i++){
            Edge[i][v]=Edge[i][numVertices-1];
        }
        numVertices--;
        for(j=0;i<numVertices;j++)
            Edge[v][i]=Edge[numVertices][j];
        return true;
    }
    bool Graphmtx::insertEdge(int v1,int v2,E cost){
        if(v1<0||v1>=numVertices||v2<0||v2>=numVertices){
            cout<<"error"<<endl;
            return false;
        }
        Edge[v1][v2]=cost;
        Edge[v2][v1]=cost;
        return true;
    }
    bool Graphmtx::removeEdge(int v1,int v2){
        if(v1<0||v1>=numVertices||v2<0||v2>=numVertices){
            cout<<"error"<<endl;
            return false;
        }
        Edge[v1][v2]=maxWeight;
        Edge[v2][v1]=maxWeight;
        numEdge--;
        return true;
    }
    int main(){
        return 0;
    }

  • 相关阅读:
    poj3614 Sunscreen 题解报告
    poj2299 Ultra-QuickSort 题解报告
    poj3784 Running Median 题解报告(对顶堆)
    CH103 Cinema 题解报告
    poj1845 Sumdiv 题解报告
    poj2018 Best Cow Fences 题解报告
    $CF311B Cats Transport$ 斜率优化
    斜率优化入门题:任务安排$123$ : )
    $Poj1821 Fence $单调队列优化$DP$
    《算法竞赛》$0×00$基本算法
  • 原文地址:https://www.cnblogs.com/wangjianupc/p/10587209.html
Copyright © 2020-2023  润新知