zoukankan      html  css  js  c++  java
  • 迪杰斯特拉模板出来了

    #include<iostream>
    using namespace std;
    const int maxx=105;
    const int INF=1000000; 
    int map[maxx][maxx];
    bool used[maxx];
    int dis[maxx];
    int mapsize;
    void init(int c)
    {
        int x,y,quan;
        for(x=0;x<maxx;x++)
        {
            used[x]=0;
        
        }
        for(x=0;x<maxx;x++)
        {
            dis[x]=INF;
        
        }
        for(x=0;x<maxx;x++)
            for(y=0;y<maxx;y++)
            {
                if(x==y)
                {
                    map[x][y]=0;
                
                }
                else
                {
                    map[x][y]=INF;
                
                }
            
            
            }//初始化完成;
    
    
        while(c--)
        {
            scanf("%d %d %d",&x,&y,&quan);
            map[x][y]=quan;
            map[y][x]=quan;
        
        }
    
    
    
    }
    void Dijkstra(int a,int b)
    {
        int i;
        int j;
        int k;
        for(i=1;i<=mapsize;i++)
        {
            dis[i]=map[a][i];
        
        }//输入迪杰斯特拉 数组;
        for(i=1;i<=mapsize;i++)
        {
            int min=INF;
            int weizhi;
            for(j=1;j<=mapsize;j++)//搜索最小数值
            {
                if(dis[j]<=min&&used[j]==0)
                {
                    min=dis[j];
                    weizhi=j;
                
                }
            
            }//搜索最小数值
            used[weizhi]=1;
            for(j=1;j<=mapsize;j++)
            {
                if(map[weizhi][j]+dis[weizhi]<dis[j]&&used[j]==0)
                {
                    dis[j]=map[weizhi][j]+dis[weizhi];
                
                }
            
            
            }
        }
        printf("%d
    ",dis[b]);//输出a 到 b最小值
    
    
    
    
    }
    
    int main()
    {
    
        int star,end;
        int n,m;
        while(scanf("%d %d",&n,&m)!=EOF,n+m)
        {
            star=1;
            end=n;
            mapsize=n;
            init(m);
            Dijkstra(star,end);
    
        
        
        }
    
    return 0;
    }

    要理解好迪杰斯塔拉;

    每次更新都要加回 搜索到的最小值的 dis值;

  • 相关阅读:
    最流行的javascript 代码规范
    jquery里阻止冒泡ev.stopPropagation()
    jquery里阻止冒泡ev.stopPropagation()
    响应式页面设计原理
    fromCharCode()的用法
    slice的用法
    java 反转数组
    java 一个数组的长度
    Java访问数组
    java 数组的定义
  • 原文地址:https://www.cnblogs.com/2013lzm/p/3266323.html
Copyright © 2011-2022 走看看