Witam. Chcę zrobić program rozwiązujący problem komiwojażera. Jestem na etapie, gdzie mam już tablicę z obliczonymi długościami tras pomiędzy miastami. Chciałbym byście sprawdzili mi poprawność tego kodu. Wiem, że może być w nim wiele błędów jakich nie powinno się robić i nie chcę ich później popełniać :)
Kod z plikiem Komi.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Mini_Paint
{
public partial class frmMiniPaint : Form
{
private Graphics g;
int j, i;
public int l; // liczba miast
int[,] wspMiast = new int[50, 3];//tablica do zapisania współżędnych miast
public frmMiniPaint()
{
InitializeComponent();
imgObrazek.Image = new Bitmap(600, 530);
}
private void frmMiniPaint_Load(object sender, EventArgs e)
{
}
private void imgObrazek_MouseDown(object sender, MouseEventArgs e)
{
int y = 14;//wielkość punktów na mapie
if (g == null) return;
if (e.Button == MouseButtons.Left)
{
g.FillEllipse(Brushes.Black, e.X-6, e.Y-6, y, y);
imgObrazek.Refresh();
int xx = Cursor.Position.X;//przypisanie pozycji myszki do zmiennych
int yy = Cursor.Position.Y;
//------------------------------pętla zapisująca numer miasta/punktu, oraz pozycje miast/punktów do tablicy
for (j=0; j<3; j++)
{
if (j == 0)
{
wspMiast[i, j] = i+1;
}
else if (j == 1)
{
wspMiast[i, j] = xx;
}
else if (j == 2)
{
wspMiast[i, j] = yy;
}
}
//-------------------------------------------------------
i = i + 1;//licznik ilości miast/kliknięć na mapie
l = i;
}
}
private void imgObrazek_MouseMove(object sender, MouseEventArgs e)
{
}
private void imgObrazek_MouseEnter(object sender, MouseEventArgs e)
{
}
private void otwórzToolStripMenuItem_Click(object sender, EventArgs e)
{
//-----------wczytanie obrazka z wyglądem mapy
OpenFileDialog dialog = new OpenFileDialog();
dialog.ShowDialog();
if (dialog.FileName == "") return;
imgObrazek.Load(dialog.FileName);
g = Graphics.FromImage(imgObrazek.Image);
//---------------------
}
private void imgObrazek_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
//---------------pętle wyśwoietlające pozycje miast
for (i = 0; i < 50; i++ )
{
for (j = 0; j < 3; j++)
{
Console.Write("i=" +i+ " ,j=" +j+ " - ");
Console.Write(wspMiast[i, j]);
Console.WriteLine(" ");
}
}
//--------------------------
Console.WriteLine(l); //wyświetlenie ilości miast/punktów na mapie
Console.WriteLine("tablica z odległościami");
int[,] odlMiast = new int[l+1, l+1];//tablica z odległościami między miastami
//---------pętla wypełniająca tablicę z odległościami pomiędzy miastami
for (i = 0; i < l+1; i++)
{
for (j = 0; j < l+1; j++)
{
if (i == 0)
{
odlMiast[i, j] = j;
}
else if (j == 0)
{
odlMiast[i, j] = i;
}
else
{
odlMiast[i,j] = Convert.ToInt32(Math.Sqrt((wspMiast[i-1, 1] - wspMiast[j-1, 1]) * (wspMiast[i-1, 1] - wspMiast[j-1, 1]) + ((wspMiast[i-1, 2] - wspMiast[j-1, 2]) * (wspMiast[i-1, 2] - wspMiast[j-1, 2]))));
}
}
}
//-------------------------------
//--------------wyświetlanie tablicy z odległościami
for (i = 0; i < l+1; i++)
{
for (j = 0; j < l+1; j++)
{
Console.Write("i=" + i + " ,j=" + j + " - ");
Console.Write(odlMiast[i, j]);
Console.WriteLine(" ");
}
}
//-----------------------
}
}
}
Kod z pliku Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Mini_Paint
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMiniPaint());
}
}
}
Jeśli ktoś woli sprawdzić działanie, to oczywiście prześlę program na PW lub maila.
Potrzebuję również w nowej klasie, która znajduje się w innym pliku xxxx.cs tablicę odlMiat, lecz nie wiem jak ją pobrać.
Byłbym wdzięczny za wszelkie porady, oraz krytykę.