تبليغات
تبلیغات در دانشجو کلوب محک :: موسسه خيريه حمايت از کودکان مبتلا به سرطان ::
جستجوگر انجمن.براي جستجوي مطالب دانشجو کلوپ مي توانيد استفاده کنيد 
برای بروز رسانی تاپیک کلیک کنید
 
امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5

الگوریتم دیکسترا به زبان c#

نویسنده پیام
  • navid
    آفلاین
  • مدیر بازنشسته
    **
  • ارسال‌ها: 1,344
  • تاریخ عضویت: مرداد ۱۳۹۰
  • اعتبار: 85
  • تحصیلات:لیسانس
  • علایق:برنامه نویسی
  • محل سکونت:Istanbul, Turkey
  • سپاس ها 1152
    سپاس شده 3031 بار در 1139 ارسال
  • امتیاز کاربر: 27,279$
  • حالت من:حالت من
ارسال: #1
الگوریتم دیکسترا به زبان c#

کد:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;

namespace DijktrasAlgorithm
{
class Program
{
///writing by navid
/// site http://daneshju-club.com if you want to use the source code
static List<node> Nodes = new List<node>();
static Dictionary<string, int> NodesIndex = new Dictionary<string, int>();
static List<edge> Edges = new List<edge>();
static int SizeEdges = 0;
static int SizeNodes = 0;
static string StartNode;
class node
{
public string name;
public string pre;
public int Dist;
public bool vis;
public node(string NodeName)
{
name = NodeName;
Dist = -1;
vis = false;
}
}
static public void AddNode(string NodeName)
{
node temp = new node(NodeName);
Nodes.Add(temp);
NodesIndex.Add(NodeName, Nodes.Count() - 1);
}
class edge
{
public string N1;
public string N2;
public int Dist;
public edge(string Node1, string Node2, int EdgeVal)
{
N1 = Node1;
N2 = Node2;
Dist = EdgeVal;
}
}
static public void AddEdge(string Node1, string Node2, int EdgeVal)
{
edge temp = new edge(Node1, Node2, EdgeVal);
Edges.Add(temp);
}
static void SetStartNode(string name)
{
Nodes[NodesIndex[name]].Dist = 0;
SizeNodes = Nodes.Count();
SizeEdges = Edges.Count();
StartNode = name;
}
static int VisitClosetNode()
{
int index = 0;
int Dist = 0;
for (int i = 0; i < SizeNodes; ++i)
{
if (!Nodes[i].vis && Nodes.Dist >= 0)
{
Dist = Nodes[i].Dist;
index = i;
break;
}
}
for (int i = 0; i < SizeNodes; ++i)
{
if (Nodes[i].Dist < Dist && !Nodes.vis && Nodes[i].Dist >= 0)
{
Dist = Nodes[i].Dist;
index = i;
}
}
Nodes[index].vis = true;
return index;
}
static void GetAllAdjcentNodes(string N, List<string> AdjNodes)
{
for (int i = 0; i < SizeEdges; ++i)
{
if (Edges[i].N1 == N && !(Nodes[(NodesIndex[Edges.N2])].vis))
{
AdjNodes.Add(Edges[i].N2);
}
else if (Edges[i].N2 == N && !(Nodes[NodesIndex[Edges.N1]].vis))
{
AdjNodes.Add(Edges[i].N1);
}
}
}
static bool EdgeConnectsNodes(edge E, string N1, string N2)
{
return (E.N1 == N1 && E.N2 == N2 || E.N1 == N2 && E.N2 == N1);
}
static int GetDistance(string N1, string N2)
{
for (int i = 0; i < SizeEdges; ++i)
{
if (EdgeConnectsNodes(Edges[i], N1, N2))
{
return Edges[i].Dist;
}
}
return -1;
}
static int GetNumOfUnVisNodes()
{
int NOUVN = 0;
for (int i = 0; i < SizeNodes; ++i)
{
if (!Nodes[i].vis)
{
++NOUVN;
}
}
return NOUVN;
}
static void Dijkstras()
{
while (GetNumOfUnVisNodes() > 0)
{
node ClosetsNode = Nodes[VisitClosetNode()];
List<string> AdjNodes = new List<string>();
GetAllAdjcentNodes(ClosetsNode.name, AdjNodes);
int SizeAdj = AdjNodes.Count();
for (int i = 0; i < SizeAdj; ++i)
{
node AdjNode = Nodes[NodesIndex[AdjNodes[i]]];
int Distance = ClosetsNode.Dist + GetDistance(ClosetsNode.name, AdjNodes[i]);
if (AdjNode.Dist >= 0)
{
if (Distance < AdjNode.Dist)
{
AdjNode.Dist = Distance;
AdjNode.pre = ClosetsNode.name;
}
}
else
{
AdjNode.Dist = Distance;
AdjNode.pre = ClosetsNode.name;
}
}
}
}
static void GetPathTo(string N, List<string> Path)
{
string CN = N;
while (CN != StartNode)
{
string Temp = CN;
Path.Insert(0, Temp);
CN = Nodes[NodesIndex[CN]].pre;
}
Path.Insert(0, StartNode);
}
static void Main(string[] args)
{
AddNode("a");
AddNode("b");
AddNode("c");
AddNode("d");
AddNode("e");
AddNode("f");
AddNode("g");

AddEdge("a", "c", 10);
AddEdge("a", "d", 19);
AddEdge("b", "c", 4);
AddEdge("c", "d", 4);
AddEdge("b", "f", 41);
AddEdge("c", "e", 20);
AddEdge("e", "f", 17);
AddEdge("d", "g", 30);
AddEdge("g", "f", 4);

SetStartNode("a");

Dijkstras();

List<string> Path = new List<string>();
GetPathTo("f", Path);
int Size = Path.Count();
for (int i = 0; i < Size; ++i)
{
Console.WriteLine(Path[0]);
Path.Remove(Path[0]);
}
Console.Read();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201



مطالب مشابه ...






تن آدمی شریف است به جیب آدمیت و همین لباس زیباست نشان آدمیت !

۲۵-۷-۱۳۹۰ ۰۵:۴۲ عصر
جستجو یافتن همه ارسال های کاربر اهدا امتیازاهدای امتیاز به کاربر پاسخ پاسخ با نقل قول
 سپاس شده توسط ♔ αϻἰг κнаη ♔ ، senior engineer

برای بروز رسانی تاپیک کلیک کنید


مطالب مشابه ...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  الگوریتم فلوید به زبان #c navid 1 2,429 ۲۹-۹-۱۳۹۴ ۱۲:۴۴ صبح
آخرین ارسال: mahan_00
  برنامه نویسی قدم به قدم monoDroid به زبان c.# c0mmander 8 5,006 ۲۷-۹-۱۳۹۳ ۰۳:۳۶ عصر
آخرین ارسال: c0mmander
  مار پیچ یا Sprial به زبان سی شارپ #C ♔ αϻἰг κнаη ♔ 0 294 ۲۳-۴-۱۳۹۲ ۰۴:۰۶ عصر
آخرین ارسال: ♔ αϻἰг κнаη ♔
  پروژه مدیریت ویدئو کلوپ به زبان سی شارپ ♔ αϻἰг κнаη ♔ 0 1,957 ۹-۸-۱۳۹۰ ۰۸:۲۲ عصر
آخرین ارسال: ♔ αϻἰг κнаη ♔
  الگوریتم کوله پشتی به روش حریصانه به زبان c# navid 0 1,916 ۲۵-۷-۱۳۹۰ ۰۵:۲۵ عصر
آخرین ارسال: navid
  الگوریتم کوله پشتی پویا به زبان #c navid 0 1,345 ۲۴-۷-۱۳۹۰ ۱۱:۵۹ عصر
آخرین ارسال: navid

پرش به انجمن:

کاربرانِ درحال بازدید از این موضوع: 1 مهمان