PDA

View Full Version : mình sắp nộp bài tập c++ rui!



hoa vo khuyet
10-10-2009, 20:29
thầy cho đề tài là viết code và nêu thuật giải bằng lưu đồ bài tìm đường di ngắn nhất giữa 2 điểm của đồ thị!bạn nào biết làm bài này cho mình xin nha!liên hệ với mình qua email :langtuvutru@gmail.com hay là post lên forum để các bạn cùng tham khảo cũng được!cám ơn trước nha!

thieugiadam
10-10-2009, 23:23
bạn dùng C# làm là đc mà
hãy dùng thuật toán dijkstra di
class Dijkstra:InOutPut1
{
public static StreamWriter f = File.CreateText("E:/Dijkstra.txt");
private int[] Nhan;
private int[] Truoc;
private int xp, kt;
private void TimDuongDi()
{
Nhan = new int[n + 1];
Truoc = new int[n + 1];
Queue q = new Queue(n + 1);
Console.Write("Nhap diem xuat phat : ");
xp = int.Parse(Console.ReadLine());
q.Enqueue(xp);
Truoc[xp] = xp;
//Khoi tao cac gia tri cho mang nhan
for (int i = 1; i < n + 1; i++)
{
if (i == xp)
Nhan[i] = 0;
else
Nhan[i] = 1000;
}
//Giai thuat Dijkstra
int u;
while (q.Count != 0)
{
u = (int)q.Dequeue();
for (int i = 1; i < n + 1; i++)
{
if (Nhan[i] > Nhan[u] + a[u, i] && a[u, i] > 0)
{
Nhan[i] = Nhan[u] + a[u, i];
Truoc[i] = u;
q.Enqueue(i);
}
}
}
}
private void KetQua()
{
Console.Write("\nNhap diem ket thuc : ");
kt = int.Parse(Console.ReadLine());
Console.WriteLine("Duong di ngan nhat tu dinh " + xp + " den dinh " + kt);
Console.Write("{0} <== ", kt);
f.Write("{0} <== ", kt);
int x = Truoc[kt];
while (x != xp)
{
Console.Write("{0} <== ", x);
f.Write("{0} <== ", x);
x = Truoc[x];
}
Console.Write("{0}", xp);
f.Write("{0} ", xp);
}
public static void Test()
{
Console.WriteLine("***********Giai Thuat Dijkstra***********");
Console.WriteLine(" ****** Do Thi Doc Duoc Tu Tep *****");
Dijkstra dt = new Dijkstra();
dt.Doc();
dt.Hien();
dt.TimDuongDi();
dt.KetQua();
Dijkstra.f.Close();
}