各位大大,請問一下
我現在做的是最短路徑~~
現在只做到~~輸入每條路徑,
但卻顯示出卻是類似像矩陣一樣,
可以只出現~~最短的那條嗎?
拜託各位大大解答一下~~~
[code]
//--------------------------------------------------------------------------- #include
#pragma hdrstop #include "Unit1.h"
#define MAXLEN 1000
int cost[7][7];
int dist[7];
#pragma argsused
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void creategraph(int *node,int num)
{
int from;
int to;
int i; for ( i = 0; i < num; i )
{
from = node[i*3];
to = node[i*3 1];
cost[from][to] = node[i*3 2];
}
}
//--------------------------------------------------------------------------- void shortestpath(int begin,int num)
{
int selected[7];
int min;
int s;
int i,j; for ( i = 2; i <= num; i )
{
selected[i] = 0;
dist[i] = cost[begin][i];
}
selected[begin] = 1;
dist[begin] = 0;
Form1 -> Memo1 -> Text = Form1 -> Memo1 -> Text "頂點1 2 3 4 5 6\n"; for ( j = 1; j <= num; j )
Form1 -> Memo1 -> Text = Form1 -> Memo1 -> Text dist[j] "\t";
Form1 -> Memo1 -> Text = Form1 -> Memo1 -> Text "\n"; for ( i = 1; i <= num - 1; i )
{
min = MAXLEN;
for ( j = 1; j <= num; j ) if ( min > dist[j] && selected[j] == 0 )
{
s = j;
min = dist[j];
}
selected[s] = 1; for ( j = 1; j <= num; j )
{
if (selected[j] == 0 && dist[s] cost[s][j] < dist[j])
dist[j] = dist[s] cost[s][j];
Form1 -> Memo1 -> Text = Form1 -> Memo1 -> Text dist[j] "\t" ;
}
Form1 -> Memo1 -> Text = Form1 -> Memo1 -> Text "\n";
}
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
//Memo1 -> Text = Edit1 -> Text "\n" Edit2 -> Text Edit3 -> Text Edit4 -> Text Edit5 -> Text Edit6 -> Text ;
int i,j,q;
int E1 = Edit1 -> Text.ToInt();
int E2 = Edit2 -> Text.ToInt();
int E3 = Edit3 -> Text.ToInt();
int E4 = Edit4 -> Text.ToInt();
int E5 = Edit5 -> Text.ToInt();
int E6 = Edit6 -> Text.ToInt();
int E7 = Edit7 -> Text.ToInt();
int node[7][3] = {{1, 2, E1},
{2, 3, E2},
{2, 4, E3},
{3, 5, E4},
{4, 5, E5},
{4, 6, E6},
{5, 6, E7}}; for ( i = 1; i <= 6; i )
for ( j = 1; j <= 6; j )
cost[i][j] = MAXLEN;
creategraph(*node,7);
Memo1 -> Text = "加權圖形的鄰接陣列內容:\n" ; for ( i = 1; i <= 6; i )
{
for ( j = 1; j <= 6; j )
Memo1 -> Text = Memo1 -> Text cost[i][j] "\t" ;
Memo1 -> Text = Memo1 -> Text "\n";
}
Memo1 -> Text = Memo1 -> Text "\n從頂點1到各頂點最近距離計算過程:\n";
shortestpath(1,6); }
//---------------------------------------------------------------------------
[code] 發表人 - liyanzi 於 2005/07/12 14:15:06