構建有向帶權圖用鄰接矩陣求最短路徑
阿新 • • 發佈:2019-02-20
#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;
}
稍微有點小錯誤。思路還是對的 。