zoukankan      html  css  js  c++  java
  • 1.如何构建一个图-----邻接矩阵

    #include<iostream>
    using namespace std;
    #define UNVISTITED 0 //表示没有被访问过
    #define VISITED 1   //表示被访问过
    //图类
    class Graph {
    private:
        int numVertex, numEdge;//点的数目和边的数目
        int **matrix;//邻接矩阵
        int *mark;
    public:
        //构造函数
        Graph(int numVert) {
            Init(numVert);
        }
        //析构函数
        ~Graph()
        {
            delete[]mark;
            for (int i = 0; i < numVertex; i++) {
                delete[]matrix[i];
            }
            delete[]matrix;
        }
        //初始化
        void Init(int n) {
            int i;
            numVertex = n;
            numEdge = 0;
            mark = new int[numVertex];
            matrix = new int*[numVertex];
            for (i = 0; i < numVertex; i++) {
                mark[i] = UNVISTITED;
            }
            for (i = 0; i < numVertex; i++) {
                matrix[i] = new int[numVertex];
            }
            for (i = 0; i < numVertex; i++) {
                for (int j = 0; j < numVertex; j++) {
                    matrix[i][j] = 0;
                }
            }
        }
        //返回点的数目
        int n() { return numVertex; }
        //返回边的数目
        int e() { return numEdge; }
        //返回点V的第一个邻居
        int first(int v){
            for (int i = 0; i < n(); i++) {
                if (matrix[v][i] != 0) {
                    return i;
                }
            }
            return -1;
        }
        //返回W后的第一个邻居
        int next(int v, int w) {
            for (int i = w + 1; i < n(); i++) {
                if (matrix[v][i] != 0) {
                    return i;
                }
            }
            return -1;
        }
        //设置v1与v2之间有边,赋值wt
        void setEdge(int v1, int v2, int wt) {
            if (matrix[v1][v2] == 0) {
                matrix[v1][v2] = wt;
                numEdge++;
            }
        }
        //删除v1和v2之间的边
        void deleteEdge(int v1, int v2) {
            if (matrix[v1][v2] == 1) {
                matrix[v1][v2] = 0;
                numEdge--;
            }
        }
    };
    int main() {
    }
  • 相关阅读:
    [12/11/19] 折半&倍增思想学习笔记
    [11/07/19] CDQ学习笔记
    magic cube
    Codeforces Round #514 (Div. 2) B
    Codeforces Round #514 (Div. 2) C. Sequence Transformation
    八位数
    hdu3001Travelling
    Codeforces Round #512 E
    Codeforces Round #512 (Div. 2) D. Vasya and Triangle
    codeforces 1042 e
  • 原文地址:https://www.cnblogs.com/caimuqing/p/5845641.html
Copyright © 2011-2022 走看看