3. 在地圖中搜尋最低成本的路徑
題目自己不講清楚用什麼形式做,唉。
using System.Linq;
namespace Q3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var dic = new Dictionary<int, Dictionary<int, int>>();
foreach (var item in textBox1.Text.Split('\n'))
{
var data = item.Split(' ');
int from = int.Parse(data[0]);
if (!dic.ContainsKey(from))
{
dic[from] = new Dictionary<int, int>();
}
dic[from][int.Parse(data[1])] = int.Parse(data[2]);
};
var paths = new List<List<int>>();
void run(int goal, List<int> visited)
{
var current = visited.Last();
if (current == goal)
{
paths.Add(visited);
return;
}
foreach (var item in dic[current])
{
if (visited.Contains(item.Key)) continue;
var clone = new List<int>(visited);
clone.Add(item.Key);
run(goal, clone);
}
}
run(7, new List<int>(new[] { 1 }));
List<int> min = null;
List<int> minCost = null;
int minCostSum = int.MaxValue;
foreach (var item in paths)
{
var cost = 0;
List<int> costs = new List<int>();
for (global::System.Int32 i = 1; i < item.Count; i++)
{
cost += dic[item[i - 1]][item[i]];
costs.Add(dic[item[i - 1]][item[i]]);
}
if (cost > minCostSum)
{
continue;
}
min = item;
minCost = costs;
minCostSum = cost;
}
textBox2.Text = $@"最低成本值總和:{minCostSum}
連線次序:{(string.Join("", min.Select(e => "\t" + e)))}
連線數值:{"\t"}0{(string.Join("", minCost.Select(e => "\t" + e)))}";
}
}
}
Last updated