全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1309
推到 Plurk!
推到 Facebook!

關於最短路徑的演算法 Bellman 和 Ford

尚未結案
tetsu83
一般會員


發表:1
回覆:0
積分:0
註冊:2005-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-13 01:19:33 IP:61.59.xxx.xxx 未訂閱
利用FUNDAMENTALS OD DATA STRUCTURES IN C++裡面 6-54頁寫的 Bellman 和 Ford 演算法 實際寫出以下的程式碼 可以讀取文字檔裡的相鄰矩陣 並且可以計算負數的邊 求出 起始點到每個點的最短路徑 程式已經除錯  可以執行 問題再於撰寫的程式只能輸出一條最短路徑,如果起始點到某個點的最短路徑不只一條的話,要如何修改程式碼 ,才能秀出不只一條的最短路徑呢? 這個問題小弟想好久都沒辦法做出有效的修改....煩請板上的各位高手幫小弟想出較有效率的修改方法   感激!!!    文字檔的內容 : 0 1 2 -1 9999 9999 9999 9999 9999 9999 9999 0 9999 3 1 9999 9999 9999 9999 9999 9999 9999 0 -1 9999 9999 9999 9999 9999 9999 9999 9999 9999 0 9999 2 9999 9999 9999 9999 9999 9999 9999 9999 0 1 2 2 3 9999 9999 9999 9999 9999 9999 0 -2 9999 9999 9999 9999 9999 2 9999 9999 9999 0 3 9999 1 9999 9999 9999 9999 9999 9999 9999 0 -1 1 9999 9999 9999 9999 9999 9999 9999 9999 0 4 9999 9999 9999 9999 9999 9999 9999 9999 -1 0    程式碼部分 :
#include 
#pragma hdrstop
#include "Unit1.h"
#include 
#include     #pragma package(smart_init)
#pragma resource "*.dfm"
#define maxV 20
#define nv 10
int A[maxV][maxV];
int P[maxV][maxV];
int i,j,k;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{}
void __fastcall TForm1::OpenFile1Click(TObject *Sender)
{
 if(OpenDialog1->Execute())
 {
  ifstream FData;
  FData.open(OpenDialog1->FileName.c_str());
  for(int i=0;i> A[i][j];
         P[i][j]=j;
        }            for(k=0;kA[i][k] A[k][j])
                                {
                                        // 由 i 到 j 之最短路徑長為由 i 到 k 到 j 之路徑和
                                        A[i][j]=A[i][k] A[k][j];
                                        // 由 i 到 j 之最短路徑經過中間節點 k
                                        P[i][j]=P[i][k];
                                }
 }
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int start;
        start = StrToInt(Edit1->Text);
        Label1->Caption = "\t\t\t\t Adjacency Matrix\n\n";
        for(int i=0;iCaption = Label1->Caption   "\t "   IntToStr(A[i][j]);
                Label1->Caption = Label1->Caption   "\n";
        }
        Label1->Caption = Label1->Caption   "\n";            for(i=start;;)
        {
                for(j=0;jCaption = Label1->Caption   "\n\t距離 = "   IntToStr(A[i][j])   " ; \t路徑 = "   IntToStr(i);
                        k=P[i][j];
                        while(k!=j)
                        {
                                Label1->Caption = Label1->Caption   "-->"   IntToStr(k);
                                k=P[k][j];
                        }
                        Label1->Caption = Label1->Caption   "-->"   IntToStr(k);
                }
                Label1->Caption = Label1->Caption   "\n\n";
                break;
        }        
}
//---------------------------------------------------------------------------
發表人 - tetsu83 於 2005/04/13 01:54:53
bugmans
高階會員


發表:95
回覆:322
積分:188
註冊:2003-04-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-30 08:57:14 IP:218.166.xxx.xxx 未訂閱
這應該是作業題吧,也沒有內文,板主還設為懸賞題,建議直接刪除 google隨便找都有 http://www.google.com.tw/search?hl=zh-TW&client=firefox-a&rls=org.mozilla:zh-TW:official&q=Bellman Ford&btnG=搜尋&meta=
系統時間:2024-06-08 1:20:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!