迪杰斯特拉模板出来了

#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\n",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值;

posted @ 2013-08-18 19:35  一只蚊子  阅读(198)  评论(0编辑  收藏  举报