图算法里面的基础算法,没什么好说的~
代码:
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
#define max 1000
int graph[100][100];
int visited[100];
int dist[100];
int path[100];
int num;
void fway(int n)
{
path[n]=-1;
dist[n]=0;
visited[n]=1;
int nown=n;
for(int i=0;i<num-1;i++)
{
for(int j=0;j<num;j++)
{
if(visited[j]!=1&&(dist[nown]+graph[nown][j])<dist[j])
{
dist[j]=dist[nown]+graph[nown][j];
path[j]=nown;
}
}
int mindist=max;
for(int j=0;j<num;j++)
{
if(visited[j]!=1&&mindist>dist[j])
{
mindist=dist[j];
nown=j;
}
}
visited[nown]=1;
}
}
int main()
{
ifstream in;
in.open("graph.txt",ios::in);
in>>num;
for(int i=0;i<num;i++)
{
for(int j=0;j<num;j++)
{
in>>graph[i][j];
}
}
memset(path,-1,sizeof(path));
memset(visited,0,sizeof(visited));
for(int i=0;i<num;i++)
dist[i]=max;
fway(0);
for(int i=0;i<num;i++)
cout<<path[i]<<"\t";
cout<<endl;
for(int i=0;i<num;i++)
cout<<dist[i]<<"\t";
cout<<endl;
return 0;
}
这个我就测了两组数据,如果有哪位朋友发现了错误或者不妥的地方,欢迎批评指正。