單源最短路徑

#include<stdio.h>
#include<stdlib.h>
#include<vector>
using namespace std;
#define mx 505
int dis[mx];
bool visited[mx];
struct node
{
       int city;
       int d;
};
vector<node> edge[mx];
int S,D;//
int main()
{
    int n,m;
    scanf("%d %d %d %d",&n,&m,&S,&D);
    for(int i=0;i<n;i++) edge[i].clear();
    for(int i=0;i<m;i++)
    {
         int a,b,d,c;
         scanf("%d %d %d",&a,&b,&d);
         node tmp;
         tmp.d=d;
         tmp.city=b;
         edge[a].push_back(tmp);
         tmp.city=a;
         edge[b].push_back(tmp);
    }
    for(int i=0;i<n;i++)
    {
             dis[i]=-1;
             visited[i]=false;
    }
    //core algorithm
    int nowP=S;
    dis[nowP]=0;
    visited[nowP]=true;
    for(int i=0;i<n;i++)
    {
          for(int j=0;j<edge[nowP].size();j++){
                  int tmp=edge[nowP][j].city;
                  int dist=edge[nowP][j].d;
                  if(visited[tmp]==true) continue;
                  if(dis[tmp]==-1||dis[tmp]>dis[nowP]+dist)
                     {
                          dis[tmp]=dis[nowP]+dist;
                     }
          }
          int min=123456789;
          for(int j=0;j<n;j++)
          {
               if(dis[j]==-1) continue;
               if(visited[j]==true) continue;
               if(dis[j]<min)
               {
                   min=dis[j];
                   nowP=j;
               }
          }
          visited[nowP]=true;
    }
    printf("%d\n",dis[D]);
    return 0;
}
相關文章
相關標籤/搜索