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

سلام

دوستان من دارم برنامه الگوریتم دایجکسترا رو مینویسم تو یه قسمت به مشکل خوردم اگه به عکس نگاه کنید (این مربوط به یه برنامه دیگست که من میخوام مثل همین رو درست کنم) میبینید که 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();
}











عکس های ضمیمه



pic2.JPG‏
(30.3 کیلوبایت)







فایل های ضمیمه



Dijkstra's algorithm.rar‏
(338.8 کیلوبایت)





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


خرید بک لینک
کپی رابت محفوظ است اخبار ایران و جهان
قدرت گرفته از niloblog