1. 程式人生 > 實用技巧 >【C#】Win32 API 幫助類

【C#】Win32 API 幫助類

技術標籤: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;
	}
}