dijkstra算法实现

来源:互联网 发布:软件体系结构的组成 编辑:程序博客网 时间:2024/05/16 16:08

#include <iostream>

using namespace std;
const int N=10;
const int data_max=100000000;
int graph[N][N];
int distances[N];
int front[N];
void dijkstra(int graph[N][N],int k)
{
   bool visited[N];
   int i;
   for(i=0;i<N;i++)
   visited[i]=false;
   visited[k]=true;
   front[k]=-1;
   int num=1;
   for(i=0;i<N;i++)
   {
       distances[i]=graph[k][i];
       front[i]=k;
   }
   while(num<N)
   {
      int min=data_max,start;
     for(i=0;i<N;i++)
     {
             if(distances[i]<min&&!visited[i])
             {
               min=distances[i];
               start=i;
             }
      }
      visited[start]=true;
      num++;
      front[start]=k;
      for(i=0;i<N;i++)
      {
         if(!visited[i]&&graph[start][i]<data_max&&distances[start]+graph[start][i]<distances[i])
         {
                distances[i]=distances[start]+graph[start][i];
                front[i]=start;
         }
      }
   }
}
int main()
{
    freopen("input.txt","r",stdin);
    int i,j;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
           graph[i][j]=data_max;
   for(i=0;i<N;i++)
      graph[i][i]=0;
    int m;
    cin>>m;
    int x,y,d;
    for(i=0;i<m;i++)
    {
        cin>>x>>y>>d;
        graph[x-1][y-1]=graph[y-1][x-1]=d;
    }
    int k;
    cin>>k;
    dijkstra(graph,k-1);
    for(i=0;i<N;i++)
    cout<<distances[i]<<endl;
    return 0;
}

原创粉丝点击