zoukankan      html  css  js  c++  java
  • Bellman-Ford算法解决单源最短路问题

    #include<stdio.h>
    #include<stdlib.h>
    #include<stdbool.h>
    #define max 100
    #define INF 999
    struct edge{
        int u;
        int v;
        int w;
    }e[max];
    int vertex_num,edge_num;
    int d[max];
    void relax(int u,int v,int w){
        if(d[v]>d[u]+w)d[v]=d[u]+w;
    }
    bool Bellman_Ford(int s){
        int i,j;
        
        //Part 1:init 
        for(i=0;i<vertex_num;i++){
            d[i]=INF;
        }
        d[s]=0;
        
        //Part 2:relax
        for(i=0;i<vertex_num;i++){
            for(j=0;j<edge_num;j++){
                relax(e[j].u,e[j].v,e[j].w);
            }
        }
        
        //Part 3:determine whether there exist a negative cirlce
        for(i=0;i<edge_num;i++){
            if(d[e[i].u]>d[e[i].v]+e[i].w)return false;
        }
        return true;
    }
    int main(){
        int i,j;
        FILE *fin  = fopen ("dij.in", "r");
        FILE *fout = fopen ("dij.out", "w");
        
        char buf[10];
        fgets(buf,10,fin);
        edge_num=atoi(buf);
        printf("edge_num:%d
    ",edge_num);
        
        fgets(buf,10,fin);
        vertex_num=atoi(buf);
        printf("vertex_num:%d
    ",vertex_num);
        
        for(i=0;i<edge_num;i++){
            int start,end,weight;//start point,end point and the weight of edge
            fgets(buf,10,fin);
            sscanf(buf,"%d %d %d",&e[i].u,&e[i].v,&e[i].w);
            printf("start:%d end:%d weight:%d
    ",e[i].u,e[i].v,e[i].w);
        }
        
        Bellman_Ford(0);
        for(i=0;i<vertex_num;i++){
            printf("%d ",d[i]);
        }
        return 0;
    } 
  • 相关阅读:
    3D 立体动态图 代码:
    自由切换 网页上的 ico 图标
    ES6 基本语法:
    JavaScript中class类的介绍
    React_01_ECMAScript6
    使用JS计算前一天和后一天
    Web 前端学习计划
    read
    java对象实例化
    关于为什么java需要垃圾回收
  • 原文地址:https://www.cnblogs.com/houshengtao/p/6147957.html
Copyright © 2011-2022 走看看