貪心法求解TSP問題

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n, i, j, u, v, min, edgecount = 0, tsplength = 0;
	cout << "頂點個數:";
	cin >> n;
	int *flag = new int[n];
	for (int i = 0; i < n; i++)
		flag[i] = 0;
	int **arc = new int*[n];
	for (int i = 0; i < n; i++)
	{
		arc[i] = new int[n];
	}
	//輸入圖的代價矩陣
	cout << "請以矩陣形式輸入頂點之間的距離" << endl;
	for (i = 0; i < n; i++)
		for (j = 0; j < n; j++)
			cin >> arc[i][j];
	//糾正用戶輸入的數據
	for (i = 0; i < n; i++)
		arc[i][i] = -1;
	cout << "您輸入的頂點之間的距離如下" << endl;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
			cout << setw(3) << arc[i][j];
		cout << endl;
	}
	flag[0] = 1;
	u = 0;
	cout << "最短路徑爲:" << endl;
	cout << "0-->";
	while (edgecount < n-1)
	{
		min = 100;
		for (j = 0; j < n; j++)
		{
			if ((flag[j] == 0) && (arc[u][j] != -1) && (arc[u][j] < min))
			{
				v = j;
				min = arc[u][j];
				//cout << min;
			}
		}
		tsplength += arc[u][v];
		flag[v] = 1;
		edgecount++;
		cout << v << "-->";
		u = v;
	}
	tsplength += arc[u][0];
	cout << "0"  << endl;
	cout << "最短路徑長度爲:" << tsplength << endl;
	return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章