【C#】Win32 API 幫助類
阿新 • • 發佈:2021-01-12
技術標籤:C++
1. 類與標頭檔案
class Graph {
vector<int> citys; //城市
unordered_map <int, int> cityIndex; //城市與其對應的索引
vector<vector<int>> graph; //圖
public:
//引數為城市,和城市之間的連線情況
void initGraph(vector<int> &citys, vector<vector<int>> &vec);
};
#include "graph.h"
void Graph::initGraph(vector<int>& citys, vector<vector<int>>& vec)
{
this->citys = citys;
int index = 0;
for (auto city:citys) { //記下城市對應的索引
cityIndex[city] = index++;
}
int n = citys.size();
graph.resize(n, vector<int>(n, 0));
for (int i = 0;i<vec.size( );i++) {
int indexFrom = cityIndex[vec[i][0]];
int indexTo = cityIndex[vec[i][1]];
graph[indexFrom][indexTo] = vec[i][2];
}
for (int i = 0; i < graph.size();i++) {
for (int j = 0; j < graph[i].size();j++) {
printf("%d\t", graph[i][j]);
}
cout << endl;
}
}
2. 圖鄰接矩陣的建立
用雜湊表把每個城市對應索引記錄下來,然後在鄰接矩陣的相應位置記錄值
注意vector要先申請長度,否則會報超範圍錯誤
void Graph::initGraph(vector<int>& citys, vector<vector<int>>& vec)
{
this->citys = citys;
int index = 0;
for (auto city:citys) { //記下城市對應的索引
cityIndex[city] = index++;
}
int n = citys.size();
graph.resize(n, vector<int>(n, 0)); //申請長度
for (int i = 0;i<vec.size();i++) { //記錄兩個城市之間路程
int indexFrom = cityIndex[vec[i][0]];
int indexTo = cityIndex[vec[i][1]];
graph[indexFrom][indexTo] = vec[i][2];
}
for (int i = 0; i < graph.size();i++) { //遍歷鄰接矩陣
for (int j = 0; j < graph[i].size();j++) {
printf("%d\t", graph[i][j]);
}
cout << endl;
}
}