| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 517 人关注过本帖
标题:迪杰斯特拉算法
只看楼主 加入收藏
hcl1008
Rank: 1
等 级:新手上路
帖 子:18
专家分:9
注 册:2011-12-8
结帖率:71.43%
收藏
 问题点数:0 回复次数:2 
迪杰斯特拉算法
求如何将迪杰斯特拉算法的整条最短路径都输出来!不是只是输出端点和距离!
迪杰斯特拉算法不行也可以用别的,不过要用C语言写的!拜谢!有点急!
搜索更多相关主题的帖子: 算法 C语言 如何 
2012-05-17 19:59
Ially1008
Rank: 2
等 级:论坛游民
帖 子:5
专家分:30
注 册:2012-3-29
收藏
得分:0 
用个结构体存储一下。。。比较笨的方法。。。

#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;
}
我试过了,应该可以!
2012-05-27 14:47
jfei
Rank: 4
来 自:郑州
等 级:业余侠客
帖 子:92
专家分:268
注 册:2011-8-27
收藏
得分:0 
这些算法,比较缓的很的很。

虾米们!!!有意者加QQ 2434202652,2632939128联系我
2012-05-28 15:35
快速回复:迪杰斯特拉算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017139 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved