C++实现邻接矩阵

这是AdjMatrix.h文件

#pragma once
#include 
#include 
#include 
#include 
using namespace std;

class AdjMatrix
{
private:
	int V;
	int E;
    int** adj;

private:
    void validateVertex(int v) {
        if (v < 0 || v >= V) {
            string str = ("vertex" );
            str.append("" + v);
            str.append("is invalid");
            cout << str << endl;
        } 
    }

public:
	AdjMatrix(string filename) {
        ifstream infile;
        infile.open(filename.data());   //将文件流对象与文件连接起来 
        assert(infile.is_open());   //若失败,则输出错误消息,并终止程序运行 

        char c;
        infile >> c;
        V = c - '0';
        infile >> c;
        E = c - '0';

        adj = new int* [V];// 动态申请一个二维数组
        for (int i = 0; i < V; ++i) {
            adj[i] = new int[V];
            for (int j = 0; j < V; ++j)
                adj[i][j] = 0 ;
        }

        //while (infile >> c) {
        //    if (infile.eof()) break;
        //    cout << c << endl;
        //}

        //输出
        while (infile >> c) {
            if (infile.eof()) break;
            int a = c - '0';
            infile >> c;
            int b = c - '0';
            adj[a][b] = 1;
            adj[b][a] = 1;
        }
        
        infile.close();             //关闭文件输入流 
	}

    void Adjprint() {
        for (int i = 0; i < V; i++) {
            for (int j = 0; j < V; j++)
                cout << adj[i][j] << "  ";
            cout << endl;
        }     
    }

    bool hasEdge(int v, int w) {
        validateVertex(v);
        validateVertex(w);
        return adj[v][w] == 1;
    }

    int getV() {
        return V;
    }

    int getE() {
        return E;
    }

    list adjdegree(int v) {
        validateVertex(v);
        list* res = new list;
        for (int i = 0; i < V; i++)
            if (adj[v][i] == 1)
                res->push_back(i);
        return *res;
    }

    int degree(int v) {
        return adjdegree(v).size();
    }
};

这是main文件

#include 
#include "AdjMatrix.h"
#include 
//#include "AdjList.h"
//#include"GraphDFS.h"
using namespace std;

int main() {
	AdjMatrix* adjMatrix = new AdjMatrix("g.txt");
	adjMatrix->Adjprint();

	return 0;
}

这是输入的顶点与边的关系的txt文件

第一行前面是顶点个数,后面是边的个数

下面每一行是两个顶点形成边

C++实现邻接矩阵_第1张图片

这是最后输出结果

C++实现邻接矩阵_第2张图片

你可能感兴趣的:(C++实现邻接矩阵)