圖論系列之「讀取圖演算法」

ice_moss發表於2021-05-22

一、圖的讀取

在這小節中我們將會學習到啊這樣將檔案讀如圖中,前面我們學了稠密圖和稀疏圖,為了統一介面我們使用模板類,讓其同時具備讀入兩種圖的能力。

程式碼實現

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <cassert>

using namespace std;

// 讀取圖演算法
//使用模板Graph,統一介面
template <typename Graph>
class ReadGraph{

public:
    // 從檔案filename中讀取圖的資訊, 儲存進圖graph中
       ReadGraph(Graph &graph, const string &filename){

          ifstream file(filename);
          string line;
          int V, E;

          assert( file.is_open() );

          // 第一行讀取圖中的節點個數和邊的個數
          //將file中的第一行讀入line中
          assert( getline(file, line) );
          stringstream ss(line);
          ss>>V>>E;

          assert( V == graph.V() );

         // 讀取每一條邊的資訊
          for( int i = 0 ; i < E ; i ++ ){

              assert( getline(file, line) );
              stringstream ss(line);

             int a,b;
             ss>>a>>b;
            assert( a >= 0 && a < V );
            assert( b >= 0 && b < V );
            //呼叫圖中函式新增邊
            graph.addEdge( a , b );
        }
    }
};
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章