日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++读图txt文件,并将数据结构 图显示出来

發布時間:2023/12/20 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++读图txt文件,并将数据结构 图显示出来 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

整個代碼展示


下面分別是圖的兩個txt文件,現在用C++讀取這個文件,并將圖顯示出來


第一行分別表示圖的節點數和邊數


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 6 8 0 1 0 2 0 5 1 2 1 3 1 4 3 4 3 5

?


代碼中模板Graph,可以是稀疏圖或者稠密的實現,參考連接:https://blog.csdn.net/SHAOYEZUIZUISHAUI/article/details/103079932

下列代碼需要聲明庫

#include <fstream> #include <sstream>
//適用于稀疏圖和稠密圖的泛型讀圖編程實現 template <typename Graph> class ReadGraph { public:ReadGraph(Graph &g,const string &filetxt){//讀取文件ifstream file(filetxt);//存儲文件每行的數據string line;int V, E;//確認文件是否打開assert(file.is_open());//將文件的第一行讀取到line中,確認是否讀取成功assert(getline(file, line));//將第一行輸入到stringstream中,解析出變量V,E,即文件中開頭第一行給出的stringstringstream ss(line);ss >> V >> E;//檢查讀取的點數和引用圖的點數是否是一致的assert(g.V() == V);for (int i = 0; i < E; i++){//讀取下一行assert(getline(file, line));stringstream ss(line);int a, b;ss >> a >> b;//如果a,b不越界assert(a >= 0 && a < V);assert(b >= 0 && b < V);g.AddEdge(a, b);}} private:};

整個代碼展示


Graph.h文件


#pragma once #include<vector> //稠密圖-鄰接矩陣class DenseGraph {private://n表示圖的點數,m表示圖的邊數int n, m;//表示是否是有向圖bool directed;//將變量放在了public權限中,因為遍歷方便//表示稀疏矩陣vector<vector<bool>>g;public:DenseGraph(int n, bool directed){this->n = n;this->m = 0;this->directed = directed;//初始化鄰接矩陣for (int i = 0; i < n; i++){g.push_back(vector<bool>(n, false));}}~DenseGraph(){}//給圖增加一條邊,前提是這兩個節點之間原來是沒有邊的void AddEdge(int a, int b){//檢查越界assert(a >= 0 && a < n);assert(b >= 0 && b < n);//判斷a,b之間是否有邊,如果已經存在邊,返回if (hasedge(a, b))return;//賦值g[a][b] = true;//判斷是否是有向圖if (!directed){g[b][a] = true;}//維護變量m++;}//兩個節點之間是否存在一條邊bool hasedge(int a, int b){//檢查越界assert(a >= 0 && a < n);assert(b >= 0 && b < n);return g[a][b];}//返回圖的邊數int E(){return m;}//返回圖的點數int V(){return n;}//展示圖void show(){cout << "==========DenseGraph===============" << endl;for (int i = 0; i < n; i++){cout << i << ": ";for (int j = 0; j < n; j++){cout << g[i][j]<<" ";}cout << endl;}}class adjIterator {private://定義一個圖的引用DenseGraph &G;//迭代器指向的節點int v;//當前迭代器指向的索引int index;public://初始化引用類型數據成員的唯一機會是在構造函數初始化列表中adjIterator(DenseGraph &g, int v) :G(g) {this->v = v;this->index = -1;}//迭代器的頭//返回第一個不為false的索引int begin() {//index 是這個類的屬性,只有賦值改變,才會改變,當幾點序列改變時,index得初始化index = -1;return next();}//迭代器下一個//返回下一個不為false的索引int next() {//index 是這個類的屬性,只有賦值改變,才會改變for (index += 1; index < G.V(); index++){if (G.g[v][index]){//為了返回下一個不為false的索引,下一次跳入循環后需要index+1,跳過剛剛返回的索引值return index;}}return -1;}//迭代的結尾//返回這個圖的總點數int end(){return index >= G.V();}};};//稀疏圖-鄰接表class SparseGraph{private://n 表示點,m表示邊int n, m;//判斷是否是有向圖int directed;//鄰接表vector<vector<int>>g;public:SparseGraph(int n, int directed){this->n = n;this->m = 0;this->directed = directed;for (int i = 0; i < n; i++){//將向量中的元素設為空g.push_back(vector<int>());}}~SparseGraph(){}//給圖添加一條邊,因為沒有考慮平行邊,所以該函數可能會導致平行邊void AddEdge(int a, int b){//檢查越界問題assert(a >= 0 && a < n);assert(b >= 0 && b < n);//如果兩點間存在邊,則返回,如果加了下列幾行代碼,則時間復雜度編程O(N),故一般不考慮平行邊,//if (hasEdge(a, b))// return ;//賦值g[a].push_back(b);//判斷是否是自環邊,或者是都是有向圖,只有非自環邊,或者無向圖,才滿足條件if (a != b && !directed)g[b].push_back(a);m++;}//判斷是否兩點是否存在邊bool hasEdge(int a, int b){//檢查越界問題assert(a >= 0 && a < n);assert(b >= 0 && b < n);for (int i = 0; i < g[a].size(); i++){if (g[a][i] == b){return true;}}return false;}//返回圖的邊數int E(){return m;}//返回圖的點數int V(){return n;}//展示圖void show(){cout << "==========SparseGraph===============" << endl;for (int i = 0; i < n; i++){cout << i << ": ";for (int j = 0; j < g[i].size(); j++){cout << g[i][j] << " ";}cout << endl;}}//鄰接表的迭代器類class adjIterator {private:SparseGraph &G;//當前迭代器節點的索引int v;//當前迭代器節點中的索引int index;public://初始化引用類型的數據成員,只能在構造函數的初始化列表中初始化adjIterator(SparseGraph &g, int v) :G(g){this->v = v;this->index = 0;}//迭代器的開始,返回當前節點中的第一個索引int begin(){//對于后面的節點,begin必須將index初始化為0才行index = 0;//此處不應該是G.V(),應該是對應每個節點中的多少個索引if (G.g[v].size())return G.g[v][index];//return -1;}//迭代器的迭代,返回當前節點中下一個索引int next(){index++;//此處不應該是G.V(),應該是對應每個節點中的多少個索引if (index < G.g[v].size())return G.g[v][index];//return -1;}//迭代器的接受int end(){return index >= G.g[v].size();}};};//適用于稀疏圖和稠密圖的泛型讀圖編程實現 template <typename Graph> class ReadGraph { public:ReadGraph(Graph &g,const string &filetxt){//讀取文件ifstream file(filetxt);//存儲文件每行的數據string line;int V, E;//確認文件是否打開assert(file.is_open());//將文件的第一行讀取到line中,確認是否讀取成功assert(getline(file, line));//將第一行輸入到stringstream中,解析出變量V,E,即文件中開頭第一行給出的stringstringstream ss(line);ss >> V >> E;//檢查讀取的點數和引用圖的點數是否是一致的assert(g.V() == V);for (int i = 0; i < E; i++){//讀取下一行assert(getline(file, line));stringstream ss(line);int a, b;ss >> a >> b;//如果a,b不越界assert(a >= 0 && a < V);assert(b >= 0 && b < V);g.AddEdge(a, b);}} private: };

主函數部分,除了上文提到的庫,還有一些常用的庫需要包含,自行添加


int main() {string filetext_0= "testG1.txt";DenseGraph g1(13, false);ReadGraph<DenseGraph> readgraph(g1, filetext_0);//跟后面迭代器一樣的功能,用來顯示打印圖g1.show();for (int i = 0; i < g1.V(); i++){cout << i << ": ";DenseGraph::adjIterator iterator(g1, i);for (int j = iterator.begin(); !iterator.end(); j = iterator.next()){cout << j << " ";}cout << endl;}cout << "============================" << endl;string filetext_1 = "testG2.txt";SparseGraph g2(6, false);ReadGraph<SparseGraph> readgraph_1(g2, filetext_1);//跟后面迭代器一樣的功能,用來顯示打印圖g2.show();for (int i = 0; i < g2.V(); i++){cout << i << " : ";SparseGraph::adjIterator iterator(g2, i);for (int j = iterator.begin(); !iterator.end(); j = iterator.next()){cout << j << " ";}cout << endl;} }

?

總結

以上是生活随笔為你收集整理的C++读图txt文件,并将数据结构 图显示出来的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: aaaa免费视频 | 韩国主播青草200vip视频 | 秘密基地在线观看完整版免费 | 日韩r级电影在线观看 | 日韩午夜电影网 | 欧美激情 国产精品 | 亚洲国产一区二区三区四区 | 嫩草视频网站 | 第色 | 殴美性生活 | 欧美大片视频在线观看 | 天天躁日日摸久久久精品 | 男女羞羞动态图 | 九一网站在线观看 | 日韩大片免费看 | 国偷自产视频一区二区久 | 亚洲激情久久久 | 日韩电影在线观看一区 | 蝌蚪久久 | 粉嫩小泬无遮挡久久久久久 | 亚洲一区日韩精品 | 中文字幕一区二区三区精华液 | 男女免费毛片 | 久久影院午夜理论片无码 | 在线免费视频你懂的 | 欧美人禽杂交狂配 | 在线天堂www在线国语对白 | 久久免费的精品国产v∧ | 少妇99| 色婷婷18 | 国产亚洲片 | 四虎影院免费视频 | 五月婷婷天 | 日韩免费网 | 高潮流白浆在线观看 | 国产黄片一区二区三区 | 亚洲熟女乱色一区二区三区久久久 | 日韩女同一区二区三区 | 国产高清在线 | 国产chinasex麻豆videos | 日韩视频播放 | jizz教师 | 少妇熟女一区 | 国产精品精品久久久 | 一级黄色电影片 | 亚洲国产成人va在线观看天堂 | 欧美狂猛xxxxx乱大交3 | 伊人网在线视频观看 | 激情精品 | 不卡中文字幕av | 欧美日韩视频一区二区 | 午夜av影院| 亚洲免费自拍 | 欧美日韩aaa| www.-级毛片线天内射视视 | 18岁免费观看电视连续剧 | 先锋影音中文字幕 | 海量av资源 | 国产午夜视频 | 手机在线一区二区 | 校园春色 亚洲色图 | 奇米影视第四色777 波多野结衣一区二区三区免费视频 | 在线观看精品一区 | 国内精品亚洲 | 成人一区二区av | 日韩最新中文字幕 | 欧美自拍视频 | 国产又色又爽无遮挡免费 | 亚洲精品色| 91素人约啪| 青青草国产一区 | 中文字幕久久久久 | 亚洲v在线 | 日本少妇一区二区三区 | 国产欧美在线视频 | www.狠狠撸.com | 亚洲高清网站 | 色综合综合色 | 杨幂毛片午夜性生毛片 | 亚洲欧洲av | 久久久久一区二区三区 | 青草视屏| av首页在线 | 喷水在线观看 | 七七色影院 | www.com黄色片| 爱色成人网 | 精品一区二区三区成人免费视频 | 国产aa视频 | 清纯粉嫩极品夜夜嗨av | 综合99| 日韩一区二区三区三四区视频在线观看 | 99精品一区二区三区 | 亚洲成a人片在线 | 一级特级黄色片 | 一级做a爰| av在线不卡免费看 | 亚洲日本在线播放 | 91视频一区二区 |