Browse Source

v2.0

master
parent
commit
d0f68173f5
  1. BIN
      .vs/comivoyar/v15/.suo
  2. BIN
      .vs/comivoyar/v15/Server/sqlite3/storage.ide
  3. 164
      comivoyar/Program.cs
  4. BIN
      comivoyar/bin/Debug/comivoyar.exe
  5. BIN
      comivoyar/bin/Debug/comivoyar.pdb
  6. 17
      comivoyar/bin/Debug/coord.txt
  7. 2
      comivoyar/obj/Debug/comivoyar.csproj.CoreCompileInputs.cache
  8. BIN
      comivoyar/obj/Debug/comivoyar.exe
  9. BIN
      comivoyar/obj/Debug/comivoyar.pdb

BIN
.vs/comivoyar/v15/.suo

Binary file not shown.

BIN
.vs/comivoyar/v15/Server/sqlite3/storage.ide

Binary file not shown.

164
comivoyar/Program.cs

@ -9,26 +9,26 @@ namespace komvo
{
class Program
{
public static List<Point> Points = new List<Point>();
public static List<string> Infinitives = new List<string>();
static void Main(string[] args)
{
Beginig:
List<Point> Points = new List<Point>();
Random random = new Random();
int pCount;
Write("Введите количество точек: ");
pCount = Convert.ToInt32(ReadLine());
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
string file = "coord.txt";
using (StreamReader cr = new StreamReader(file))
for(int i = 0; i < pCount; i++)
{
string line;
while ((line = cr.ReadLine()) != null)
{
string[] str = line.Split();
Points.Add(new Point { X = int.Parse(str[0]), Y = int.Parse(str[1]) });
WriteLine(str[0] + " " + str[1]);
}
int x = random.Next(80);
int y = random.Next(70);
Points.Add(new Point { X = x, Y = y });
WriteLine("Точка {0} [{1};{2}]", i + 1, x, y);
}
WriteLine();
WriteLine("\n");
int matr = Points.Count;
double[,] Matrix = new double[matr, matr];
@ -47,128 +47,66 @@ namespace komvo
int[] toSwap = new int[Points.Count - 1];
for (int i = 0; i <= toSwap.Length - 1; i++) toSwap[i] = i + 2;
//for (int i = 0; i < toSwap.Length; i++) Write(toSwap[i]); //debug
//for (int i = 0; i < toSwap.Length; i++) WriteLine(toSwap[i]);
int fct = Fact(Points.Count - 1);
string[] routes = new string[fct];
double[] leng = new double[fct];
double optim = leng[0];
int oIndex = 0;
int index = 0;
double opLength = 0, prevResult = 0;
string opRoute = string.Empty;
Permutations<int> perm = new Permutations<int>(toSwap);
int index = 0;
foreach(IList<int> p in perm)
{
string res = string.Empty;
for (int i = 0; i < toSwap.Length; i++) res += p[i].ToString() + ";";
routes[index++] = res;
}
//for (int i = 0; i < routes.Length; i++) WriteLine(routes[i]);
//CountLen(ref leng, Matrix, routes);
CountLen2(ref leng, Matrix, routes);
SearchBest(ref optim, ref oIndex, routes, leng);
//Debug(routes);
WriteLine("\n\n1{1}1 - оптимальный маршрут длинной {0:00.00}\nВсего маршрутов {2}\n{4} {3}",
optim, routes[oIndex], routes.Length, fct, Points.Count);
WriteLine(stopwatch.ElapsedMilliseconds + "ms");
stopwatch.Stop();
ReadKey();
}
public static void CountLen2(ref double[] result, double[,] mtr, string[] rts)
{
//WriteLine("loading 00%");
for (int i = 0; i < rts.Length; i++)
{
double res = 0;
//char[] ch = rts[i].ToCharArray();
//CursorLeft -= 3;
//int percent = i / rts.Length * 100;
//Write("{0:00}%");
string[] index = rts[i].Split(';');
string route = string.Empty;
for (int i = 0; i < toSwap.Length; i++) route += p[i].ToString() + ";";
opLength = CountLength(Matrix, route);
for (int j = 0; j < index.Length - 1; j++)
if (index != 0)
{
string dg = index[j];
int db = int.Parse(index[j]) - 2; //debug
string db1 = rts[i].ToString(); //debug
if (j == 0) res += mtr[0, int.Parse(index[j]) - 1];
else if (j == index.Length - 1)
if (opLength > prevResult)
{
res += mtr[int.Parse(index[j - 1]) - 2, int.Parse(index[j]) - 2];
res += mtr[0, int.Parse(index[j]) - 2];
}
else
{
res += mtr[int.Parse(index[j - 1]) - 2, int.Parse(index[j]) - 2];
opLength = prevResult;
opRoute = route;
}
}
result[i] = res;
else prevResult = opLength;
index++;
}
}
WriteLine("\n\n1;{1}1 - оптимальный маршрут длинной {0:00.00}\nИз {2} маршрутов при {3} точках\nПосчитано за {4} мс\n\n",
opLength, opRoute, Fact(Points.Count-1), Points.Count, stopwatch.ElapsedMilliseconds);
stopwatch.Stop();
public static void CountLen (ref double[] result, double[,] mtr, string[] rts)
{
for (int i = 0; i < rts.Length; i++)
Write("Ещё раз? (y/n)");
char answer = Convert.ToChar(ReadLine());
if (answer == 'y')
{
double res = 0;
char[] ch = rts[i].ToCharArray();
for (int j = 0; j < ch.Length; j++)
{
int db = int.Parse(ch[j].ToString()) - 1; //debug
string db1 = rts[i].ToString(); //debug
if (j == 0) res += mtr[0, int.Parse(ch[j].ToString()) - 1];
else if (j == ch.Length - 1)
{
res += mtr[int.Parse(ch[j - 1].ToString()) - 1, int.Parse(ch[j].ToString()) - 1];
res += mtr[0, int.Parse(ch[j].ToString()) - 1];
}
else
{
res += mtr[int.Parse(ch[j - 1].ToString()) - 1, int.Parse(ch[j].ToString()) - 1];
}
}
result[i] = res;
Points.Clear();
goto Beginig;
}
}
public static void SearchBest(ref double optim, ref int oIndex, string[] routes, double[] leng)
public static double CountLength(double[,] mtr, string route)
{
optim = leng[0];
oIndex = 0;
for (int i = 0; i < leng.Length; i++)
double result = 0;
string[] index = route.Split(';');
for (int j = 0; j < index.Length - 1; j++)
{
//WriteLine("{0:N2} - {1}", leng[i], routes[i]);
if (optim > leng[i])
string dg = index[j];
int db = int.Parse(index[j]) - 2; //debug
if (j == 0) result += mtr[0, int.Parse(index[j]) - 1];
else if (j == index.Length - 1)
{
optim = leng[i];
oIndex = i;
result += mtr[int.Parse(index[j - 1]) - 2, int.Parse(index[j]) - 2];
result += mtr[0, int.Parse(index[j]) - 2];
}
else
{
result += mtr[int.Parse(index[j - 1]) - 2, int.Parse(index[j]) - 2];
}
}
}
public static void Debug (string[] routes)
{
for (int i = 0; i < routes.Length; i++)
{
for (int j = i + 1; j < routes.Length - 1; j++)
if (routes[i].Equals(routes[j])) WriteLine("{0} {2}:: {1} {3}!!!!", routes[i], routes[j], i, j);
}
return result;
}
public partial struct Point

BIN
comivoyar/bin/Debug/comivoyar.exe

Binary file not shown.

BIN
comivoyar/bin/Debug/comivoyar.pdb

Binary file not shown.

17
comivoyar/bin/Debug/coord.txt

@ -1,10 +1,7 @@
0 0
10 10
30 20
20 30
10 40
20 50
10 60
50 70
20 80
30 100
1 0
2 10
3 20
4 30
5 40
6 50
7 60

2
comivoyar/obj/Debug/comivoyar.csproj.CoreCompileInputs.cache

@ -1 +1 @@
f0bb9fd207d6bf2b73407612668fe4a2e047ddf3
47ece507326a3ff73baa3b75434a7d03f71dc86d

BIN
comivoyar/obj/Debug/comivoyar.exe

Binary file not shown.

BIN
comivoyar/obj/Debug/comivoyar.pdb

Binary file not shown.
Loading…
Cancel
Save