1. 程式人生 > >構建有向帶權圖用鄰接矩陣求最短路徑

構建有向帶權圖用鄰接矩陣求最短路徑

#include <bits/stdc++.h>
#include <limits>
using namespace std;
int main()
{
    int tu[100][100]={0};
    int du[100]={0};
    int num;
    cout<<"輸入定點數:"<<endl;
    cin>>num;
    int x,y,t;
    for(int i=1;i<=num;i++)
    {
        cout<<"輸入在圖中的位置:"<<endl;
        cin
>>x>>y; cout<<"輸入權值:"<<endl; cin>>t; tu[x-1][y-1]=t; //構造有向圖 } //求最短路徑 int start,ends; cout<<"輸入頂點和終點:"<<endl; cin>>start>>ends; int v,w,finals[100],d[100],p[100][100],INFINITY; for(v=0;v<num;++v) { finals[v]=0
; d[v]=tu[start][v]; for(w=0;w<num;++w) p[v][w]=0; if(d[v]<INFINITY) { p[v][start]=1; p[v][v]=1; } } int mins; for(int i=1;i<num;++i) { mins=INFINITY; for(w=0;w<num;w++) if
(!finals[w]) if(d[w]<mins) { v=w; mins=d[w]; } finals[v]=1; for(w=0;w<num;w++) if(!finals[w]&&(mins+tu[v][w]<d[w])) { d[w]=mins+tu[v][w]; p[w]=p[v]; p[w][w]=1; } } cout<<"最短路徑"<<endl; cout<<d<<endl; return 0; }

稍微有點小錯誤。思路還是對的 。