迪吉斯特拉斯算法

int main(){
    int mini;
    int s;
    Graph G;
  //  freopen("/config/workspace/answer/test","r",stdin);
    cin>>G.vexNumber>>s;
    for(int i=0;i<G.vexNumber;i++){
        for(int j=0;j<G.vexNumber;j++){
            cin>>G.adjMatrix[i][j];
        }
    }

    int u[MAX_SIZE];
    int path[MAX_SIZE];
    int shortest[MAX_SIZE];
    u[s]=1;
    path[s]=s;
    shortest[s]=0;
//初始化辅助向量
for(int i=0;i<G.vexNumber;i++){
    if(i!=s){
    u[i]=0;
    if(G.adjMatrix[s][i]){
        shortest[i]=G.adjMatrix[s][i];
        path[i]=s;
    }
    else
    shortest[i]=2E64-1;}
}



int k;
for(int n=1;n<G.vexNumber;n++){
      
      mini=2E64-1;
      for(int j=0;j<G.vexNumber;j++){
          if(!u[j]&&shortest[j]<mini)
          {mini=shortest[j];
          k=j;}
      }
      u[k]=1;


      //k的纳入是否影响最短路径,更新path 和shortest[]
      for(int i=0;i<G.vexNumber;i++){
          if(G.adjMatrix[k][i]&&shortest[k]+G.adjMatrix[k][i]<shortest[i]&&!u[i]){
              shortest[i]=shortest[k]+G.adjMatrix[k][i];
              path[i]=k;
          }
          else;
      }
}



//修改结果,以达到输出要求
for(int i=0;i<G.vexNumber;i++){
    if(shortest[i]==2E64-1)
    mini=-1;
}

//输出结果
   for(int i=0;i<G.vexNumber;i++)
   if(i!=s){
    cout<<shortest[i]<<" ";}
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值