using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using static System.Console; namespace komvo { class Program { public static List Points = new List(); static void Main(string[] args) { string file = "coord.txt"; using (StreamReader cr = new StreamReader(file)) { 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]) }); } } int matr = Points.Count; double[,] Matrix = new double[matr, matr]; foreach (point p in Points) { WriteLine("{0} {1}", p.X, p.Y); } WriteLine(); for (int i = 0; i < Points.Count; i++) { for (int j = i; j < Points.Count - 1; j++) { Matrix[i, j + 1] = Math.Sqrt(Math.Pow(Points[j + 1].X - Points[i].X, 2) + Math.Pow(Points[j + 1].Y - Points[i].Y, 2)); Write("{0} {1} : {2:N2}\t", Points[i].X, Points[j + 1].X, Matrix[i, j]); } WriteLine(); } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) Write("{0:00.00} ", Matrix[i, j]); WriteLine(); } string formP = string.Empty, formN = string.Empty; for (int i = 2; i <= Points.Count; i++) formP += i.ToString(); for (int i = Points.Count; i >= 2; i--) formN += i.ToString(); WriteLine("{0} {1} {2}", formP, formN, Fact(Points.Count - 1)); WriteLine(formP + " " + Swap(formP, 1, 2)); WriteLine("\n\n"); int[] routes = new int[Fact(Points.Count - 1)]; double[] leng = new double[Fact(Points.Count - 1)]; int begin = int.Parse(formP), end = int.Parse(formN); for (int b = begin; b <= 234; b++) { string number = b.ToString(); routes[0] = int.Parse(number); routes[1] = int.Parse(Swap(number, 1, 2)); routes[2] = int.Parse(number = Swap(number, 0, 1)); routes[3] = int.Parse(Swap(number, 1, 2)); routes[4] = int.Parse(number = Swap(number, 0, 2)); routes[5] = int.Parse(Swap(number, 1, 2)); //for (int i = 0; i < Points.Count; i++) //{ // for (int j = i; j < Points.Count - 1; j++) // { // } // //WriteLine(); //} } for (int i = 0; i < routes.Length; i++) { double res = 0; char[] ch = routes[i].ToString().ToCharArray(); for(int j = 0; j < ch.Length; j++) { if (j == 0) res += Matrix[0, 1]; else if (j == ch.Length - 1) { res += Matrix[int.Parse(ch[j - 1].ToString()) - 1, int.Parse(ch[j].ToString()) - 1]; res += Matrix[0, int.Parse(ch[j].ToString()) - 1]; } else { res += Matrix[int.Parse(ch[j - 1].ToString()) - 1, int.Parse(ch[j].ToString()) - 1]; } } leng[i] = res; } for (int i = 0; i < leng.Length; i++) WriteLine("{0:N2}", leng[i]); //WriteLine(routes[0]); //MessageBox.Show(Math.Sqrt(-1).ToString()); ReadKey(); } public static string Swap(string value, int first, int second) { char[] res = value.ToCharArray(); res[first] = value[second]; res[second] = value[first]; value = new string(res); return value; } static public int Fact(int nm) { int res = 1; for (int i = 1; i <= nm; i++) { res *= i; } return res; } public partial struct point { public int X { get; set; } public int Y { get; set; } } } }