PDA

View Full Version : سوال: ارتباط گره های همسایه با یکدیگر در الگوریتم دایجکسترا؟



user1000
سه شنبه 09 شهریور 1395, 22:19 عصر
سلام

دوستان من دارم برنامه الگوریتم دایجکسترا رو مینویسم تو یه قسمت به مشکل خوردم اگه به عکس نگاه کنید (این مربوط به یه برنامه دیگست که من میخوام مثل همین رو درست کنم) میبینید که 4 گره وجود داره

حالا مثلآ اگه گره 0 رو در نظر بگیرید این گره با 4 گره دیگه ارتباط داره در واقع مشکل من هم همینه چطور لیستی از لیست ها درست کنم که مثلآ بیاد بگه

گره شماره 0 : با گره شمار ه 3 با وزن مثلآ 50
گره شماره 0 : با گره شمار ه 2 با وزن مثلآ 10
گره شماره 0 : با گره شمار ه 4 با وزن مثلآ 120
گره شماره 0 : با گره شمار ه 1 با وزن مثلآ 60

ارتباط داره یعنی این لیست برای گره 0 هستش که با گره های دیگه ارتباط داره. بقیه گره ها هم به همین ترتیب

من برای این کار یه کدی نوشتم ولی کلآ اشتباه هستش و اون چیزی نیست که من میخوام

کاری که من انجام دادم چیه ؟

من اومدم یک کلاس به نام Node ساختم که شامل دو تا property هستش Id و Neighbors


public class Node
{
public int Id { get; set; }
public List<KeyValuePair<int, int>> Neighbors { get; set; }
}


که توی id شماره گره اول که انتخاب میشه قرار میگیره و در شماره و وزن گره بعد قرار میگیره که همانطور که گفتم مثلآ گره شماره 0 : با گره شمار ه 1 با وزن 60 قرار میگیره.

این یه قسمت از کدی هست از برنامه دایجسکترا من کل سورس کد رو هم میزارم که بررسی کنید. داخل همین کد من از کلاس Node استفاده کردم.



private List<Circle> circlesSourceAndDestination = new List<Circle>();
private List<Node> graph = new List<Node>();
private List<KeyValuePair<int, int>> neighborList = new List<KeyValuePair<int, int>>();
private Node newNode = new Node();
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Right)
{
var result = circleManager.HitTest(e.Location);
if (result != -1)
{
circlesSourceAndDestination.Add(circleManager.Circ les[result]);

if (Count == 1)
{
newNode.Id = result;
}
else if (Count == 2)
{
var weigth = CalculateLengthSourceAndDestination(circlesSourceA ndDestination);
circlesSourceAndDestination.Clear();
if (weigth < 0)
{
weigth *= -1;
}

neighborList.Add(new KeyValuePair<int, int>(result, weigth));
newNode.Neighbors = neighborList;

graph.Add(newNode);

Count = 0;
}
Count++;
}
}
else
{
var result = circleManager.HitTest(e.Location);
if (result != -1)
{
circleManager.Circles[circleManager.HitTest(e.Location)].Selected = true;
circleManager.Circles[result].SelectFillColor = Color.Red;
}
}
pictureBox1.Invalidate();
}

ژیار رحیمی
چهارشنبه 10 شهریور 1395, 14:14 عصر
https://github.com/mburst/dijkstras-algorithm/blob/master/dijkstras.cs
http://quickgraph.codeplex.com/