注册 登录
编程论坛 数据结构与算法

迪杰斯特拉算法

hcl1008 发布于 2012-05-17 19:59, 517 次点击
求如何将迪杰斯特拉算法的整条最短路径都输出来!不是只是输出端点和距离!
迪杰斯特拉算法不行也可以用别的,不过要用C语言写的!拜谢!有点急!
2 回复
#2
Ially10082012-05-27 14:47
用个结构体存储一下。。。比较笨的方法。。。

#include <stdio.h>
#include <stdlib.h>
int n=8;

int cost[100][100];
 struct node{
    int data;
    int pre;
}Lnode[100];
void dijkstra(int v0,int v1)//dijkstra算法
{
    int s[100];
    int mindis,dis,i,j,u;
    for(i=1;i<=n;i++)
    {
        Lnode[i].data=cost[v0][i];
        s[i]=0;
    }
    s[v0]=1;
    for(i=1;i<=n;i++)
    {
        mindis=32676;
        for(j=1;j<=n;j++)
        {
            if(s[j]==0&&Lnode[j].data<mindis)
            {
                u=j;
                mindis=Lnode[j].data;
                if(Lnode[j].pre==0)
                    Lnode[j].pre=v0;
            }
        }
        s[u]=1;
        for(j=1;j<=n;j++)
        {
            if(s[j]==0)
            {
                dis=Lnode[u].data+cost[u][j];
                if(Lnode[j].data>dis)
                {
                    Lnode[j].data=dis;
                    Lnode[j].pre=u;
                }
                else
                {
                    Lnode[j].data=Lnode[j].data;
                }
            }
        }
        if(i==v1)
            break;
    }
    printf("%d到%d的最短距离:\n",v0,v1);
    printf("%d  ",Lnode[v1].data);
    while(1)
    {
        printf("%d ",Lnode[v1].pre);
        v1=Lnode[v1].pre;
        if(v1==v0)
            break;
   
    }printf("\n");
}

int main()
{
    int i,j,v0=1,v1=7,d;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            cost[i][j]=32676;
        }
    }
    for(i=1;i<=n;i++)
    {
        cost[i][i]=0;
    }
    cost[1][2]=20;cost[1][4]=50;cost[1][3]=30;
    cost[2][5]=40;cost[2][8]=30;cost[3][4]=40;
    cost[3][6]=20;cost[4][5]=20;cost[4][7]=90;
    cost[5][7]=60;cost[5][8]=70;cost[6][4]=30;
    cost[6][5]=100;cost[6][7]=80;cost[8][7]=150;
    dijkstra(v0,v1);
   
    return 0;
}
我试过了,应该可以!
#3
jfei2012-05-28 15:35
这些算法,比较缓的很的很。
1