• 邻接矩阵


    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    typedef int E;
    typedef char T;
    const int maxWeight=1000;
    class Graph{
    private:
        T *verticesList;
        E **edge;
        int numVertices;
        int maxVertices;
        int numEdges;
    public:
        Graph(int sz=100);
        T getValue(int v);
        bool insertVertex(const T vertex);
        bool insertEdge(int v1,int v2,E cost);
        bool removeVertex(int v);
        int getFirstNeighbor(int v);
        int getNextNeighbor(int v,int w);
    };
    Graph::Graph(int sz){
        maxVertices=sz;
        numEdges=0;
        numVertices=0;
        verticesList=new T[maxVertices];
        edge=new E*[maxVertices];
        for(int i=0;i<maxVertices;i++){
            edge[i]=new E[maxVertices];
        }
        for(int i=0;i<maxVertices;i++){
            for(int j=0;j<maxVertices;j++){
                edge[i][j]=(i==j)?0:maxWeight;
            }
        }
    }
    T Graph::getValue(int v){
        if(v>=0&&v<numVertices)
            return verticesList[v];
        else
            exit(1);
    }
    bool Graph::insertVertex(const T vertex){
        if(numVertices==maxVertices)
            return false;
        verticesList[numVertices]=vertex;
        numVertices++;
        return true;
    }
    bool Graph::insertEdge(int v1,int v2,E cost){
        if(v1<0||v2<0||v1>numEdges||v2>numEdges)
            return false;
        edge[v1][v2]=cost;
        edge[v2][v1]=cost;
        numEdges++;
        return true;
    }
    bool Graph::removeVertex(int v){
        if(v<0||v>numVertices)
            return false;
        if(numVertices==1)
            return false;
        verticesList[v]=verticesList[numVertices-1];
        for(int i=0;i<numVertices;i++){
            edge[v][i]=edge[numVertices-1][i];
        }
        numVertices--;
        for(int i=0;i<numVertices;i++){
            edge[i][v]=edge[i][numVertices-1];
        }
        return true;
    }
    int Graph::getFirstNeighbor(int v){
        if(v>=0){
            for(int i=0;i<numVertices;i++){
                if(edge[v][i]<maxWeight&&edge[v][i]>0)
                    return i;
            }
        }
        return -1;
    }
    int Graph::getNextNeighbor(int v,int w){
        if(v>=0&&w>=0){
            
        }
    }
    void DFS(Graph &G,int v,bool &visited[]){
        cout<<G.getValue(v)<<' ';
        visited[v]=true;
        int w=G.get
    }
    int main(){
        return 0;
    }
    
  • 相关阅读:
    自己编译linux内核
    codeblocks中文输入及控制台乱码
    c快速学习代码
    二分法求方程解
    苹果公司前任首席执行官乔布斯语录
    html5特性
    lamp server快速搭建
    poj 1247 Magnificent Meatballs 解题报告
    Ural 1005 Stone Pilet 解题报告
    Ural 1020 Rope 解题报告
  • 原文地址:https://www.cnblogs.com/wangjianupc/p/10587205.html
Copyright © 2020-2023  润新知