PDA

View Full Version : مبتدی: الگوریتم کروسکال به زبان سی شارپ



mmmmmmmmmb
دوشنبه 13 تیر 1390, 18:32 عصر
سلام کسی الگوریتم کروسکال و به زبان سی شارپ میتونه خوب بهم توضیح بده یا برام برنامشو با توضیح کامل قرار بده ؟ اینم برنامش :

[LEFT][LEFT][RIGHT]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace ConsoleApplication1
{
class Program
{

static void Main(string[] args)
{

//clrscr();
int n, m;

Console.WriteLine("Input Num Vertex : ");
n = int.Parse(Console.ReadLine());
int[] set = new int[20];
for (int i = 0; i < n; i++)
set[i] = i;

Console.WriteLine("Input Num Yal : ");
m = int.Parse(Console.ReadLine());
Yal[] edge = new Yal[20];

for (int i = 0; i < m; i++)
{
edge[i] = new Yal();
Console.WriteLine("Num V1 : ");
edge[i].v1 = int.Parse(Console.ReadLine());
Console.WriteLine("Num V2 : ");
edge[i].v2 = int.Parse(Console.ReadLine());
Console.WriteLine("Weight : ");
edge[i].weight = int.Parse(Console.ReadLine());
}
sort(edge, m);

for (int i = 0; i < m; i++)
Console.WriteLine("(" + edge[i].v1 + "," + edge[i].v2 + ") => W :" + edge[i].weight + "\n");

Console.WriteLine("Weight Is : " + kruskal_mst(set, edge, n, m).ToString());
Console.WriteLine("T Yals :");
for (int i = 0; i < T.Count; i++)
Console.WriteLine("Yal " + i.ToString() + " : " + T[i].ToString());
Console.ReadKey();
}
static int g = 0;
static ArrayList T = new ArrayList();
public static int kruskal_mst(int[] set, Yal[] edge, int n, int m)
{
int fe = 0;
int p = 0;
Yal e;
while (fe < n - 1 && g < m)
{
e = edge[g++];
if (set[e.v1] != set[e.v2])
{
p += e.weight;
T.Add(e.name);
int k = set[e.v1];
for (int i = 0; i < n; i++)
if (set[i] == k)
set[i] = set[e.v2];
fe++;
}
}
if (fe == n - 1) return p;
else
return -1;
}

static void sort(Yal[] ed, int m)
{
Yal temp;
for (int i = 0; i < m; i++)
for (int j = i + 1; j < m; j++)
if (ed[j].weight < ed[i].weight)
{
temp = ed[i];
ed[i] = ed[j];
ed[j] = temp;
}
}