数据结构-图

最近正在看算法4,代码是Java的,打算将其转化成C++,今晚看的是图,看得很少。

一点一点完善

今晚先写了个读取文件的构图的

#include<iostream>
#include<fstream>
using namespace std;
const int MAX=10000;
struct Node{
    int name;//点的名字
    Node *next;
};
class Head {
public:
    int name;
    Node *next;
    Head() {
        this->name = -1;
        this->next = NULL;
    }
};
        class Graph {
private:
    int V;//点的数量
    int E;//边的数量
public:
    Head head[MAX];
    int getV() {
        return this->V;
    }
    int getE() {
        return this->E;
    }
    Graph(ifstream &ss) {//坑:这里要使用引用传递(错误提示:该函数已删除)//ss是一个一个数读的
        ifstream s;
        ss >> this->V;
        ss >> this->E;
        for (int i = 0;i < E;i++) {
            int index;
            ss >> index;
        
            Node * node = new Node;//新建节点。
            Node *node1 = new Node;
              ss >> node->name;
//这个过程大概就是,读取到一个节点后,就去相应的head位置。实现相互插入。 head[index].name
= index; node->next = head[index].next; head[index].next = node; head[node->name].name= node->name; node1->next = head[node->name].next; node1->name = head[index].name; head[node->name].next = node1; } }
~Graph(){}
void display() { for (int i = 0;i < V;i++) { cout << head[i].name << "->"; Node *node = head[i].next; while (node->next!= NULL) { cout << node->name; if (node->name < head[i].name) cout << "!";//如果后面出现有节点比头结点的数字小,那么之前肯定出现过,原文中是设置成红色,我这里是输出一个感叹号。 cout << "->"; node = node->next; } if (node->name < head[i].name) cout << "!"; cout << node->name << endl; } } }; int main() { ifstream ss("D:\\1.txt"); Graph G(ss); G.display(); cin.get(); }

测试用例

13//点的个数
13//边的条数
0 5
4 3
0 1
9 12
6 4
5 4
0 2
11 12
9 10
0 6
7 8
9 11
5 3

和书本的一样

输出结果:(左)                                                                书本的结果:

 

posted @ 2018-12-30 02:39  keep!  阅读(221)  评论(0编辑  收藏  举报
Live2D