Bellman_ford算法
#include<iostream>
using namespace std;
int d[7];
int graph[7][7]={{0,2,5,0,0,0,0},{2,0,4,6,10,0,0},{5,4,0,2,0,0,0},{0,6,2,0,0,1,0},{0,10,0,0,0,3,5},{0,0,0,1,3,0,9},{0,0,0,0,5,9,0}};
void shortesPath(int s)
{
int n=7;
for(int i=0;i<n;i++)
{
d[i]=INT_MAX;
}
d[s]=0;
while(true)
{
bool update=false;
for(int i=0;i<n;i++)
{
if(d[i]==INT_MAX)
continue;
for(int j=0;j<n;j++)
{
int cost=graph[i][j];
if(cost>0)
if(d[j]>d[i]+cost)
{
update=true;
d[j]=d[i]+cost;
}
}
}
if(!update)
break;
}
}
int main()
{
shortesPath(0);
for(int i=0;i<7;i++)
cout<<d[i]<<endl;
return 0;
}
Dijkstra算法
#include<iostream>
#include<set>
using namespace std;
int d[7];
int prev[7];
set<int> s;
int graph[7][7]={{0,2,5,0,0,0,0},{2,0,4,6,10,0,0},{5,4,0,2,0,0,0},{0,6,2,0,0,1,0},{0,10,0,0,0,3,5},{0,0,0,1,3,0,9},{0,0,0,0,5,9,0}};
int minIndex()
{
int index=-1;
int min=INT_MAX;
for(int i=0;i<7;i++)
{
if(!(s.count(i)==1)&&d[i]<min)
{
min=d[i];
index=i;
}
}
return index;
}
void shortesPath(int index)
{
int n=7;
prev[index]=index;
d[index]=0;
for(int i=0;i<n;i++)
{
if(i!=index&&graph[index][i]==0)
d[i]=INT_MAX;
if(i!=index&&graph[index][i]>0)
{
d[i]=graph[index][i];
prev[i]=index;
}
}
while(s.size()<n)
{
int min=minIndex();
s.insert(min);
if(s.size()==n)
break;
for(int i=0;i<n;i++)
{
int cost=graph[min][i];
if(cost>0&&d[i]>d[min]+cost)
{
d[i]=d[min]+cost;
prev[i]=min;
}
}
}
}
int main()
{
shortesPath(0);
for(int i=0;i<7;i++)
cout<<d[i]<<endl;
return 0;
}