Задача коммивояжера - нужен пример - C#
Формулировка задачи:
Нужен алгоритм комивояжжера написанный на C#. Искал в гугле ничего не нашел
Решение задачи: «Задача коммивояжера - нужен пример»
textual
Листинг программы
public class FakeMatrix
{
private List<Guid> _x = new List<Guid>();
private List<Guid> _y = new List<Guid>();
private Dictionary<Tuple<Guid, Guid>, object> _data = new Dictionary<Tuple<Guid, Guid>, object>();
// соорудили
public FakeMatrix(int x, int y)
{
for (int i = 0; i < x; i++)
_x.Add(Guid.NewGuid());
for (int j = 0; j < y; j++)
_y.Add(Guid.NewGuid());
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
_data.Add(Tuple.Create(_x[i], _y[j]), null);
}
// брать и засовывать данные
public object this[int x, int y]
{
get
{
if (x >= 0 && x < _x.Count && y >= 0 && y < _y.Count)
return _data[Tuple.Create(_x[x], _y[y])];
else
return null;
}
set
{
if (x >= 0 && x < _x.Count && y >= 0 && y < _y.Count)
_data[Tuple.Create(_x[x], _y[y])] = value;
else
throw new Exception("Хреновые координаты.");
}
}
// удалять строку/столбец
public void RemoveX(int i)
{
if (i >= 0 && i < _x.Count) {
List<Tuple<Guid, Guid>> remove = _data.Keys.Where(k => k.Item1 == _x[i]).ToList<Tuple<Guid, Guid>>();
foreach (var item in remove)
_data.Remove(item);
_x.RemoveAt(i);
}
}
public void RemoveY(int i)
{
if (i >= 0 && i < _y.Count) {
List<Tuple<Guid, Guid>> remove = _data.Keys.Where(k => k.Item1 == _y[i]).ToList<Tuple<Guid, Guid>>();
foreach (var item in remove)
_data.Remove(item);
_y.RemoveAt(i);
}
}
}