| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 15918 人关注过本帖
标题:用迪杰斯特拉算法(Dijkstra)实现图的最短路径 C语言编写
只看楼主 加入收藏
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 8楼 雪狼MJ
bool类型是C99新增的数据类型,貌似VC++6.0还不支持C99.。。
我附上我的错误提示
图片附件: 游客没有浏览图片的权限,请 登录注册

三十年河东,三十年河西,莫欺少年穷!
2013-06-17 18:07
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:34 
其实你把后缀名c改成cpp就行了.....本来不想蹭分的...!

仰望星空...........不忘初心!
2013-06-17 18:10
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 12楼 Susake
是吗?可还是不对   你能帮忙调试下吗?

三十年河东,三十年河西,莫欺少年穷!
2013-06-17 18:19
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
程序代码:
#include <stdio.h>

/*
vertex 顶点 source 源点
path length 路径长度
pioneer 前驱
adjacent matrix 邻接矩阵
*/
#define MaxSize 5

#define Infinity 1000

void Dijkstra(int vertex, int source, int PathLength[], int AdjacentMatrix[MaxSize][MaxSize],int pioneer[MaxSize])
{
    //标记顶点是否在集合S中,如果是,则值为1,否为0
    int sign[vertex], i, j;

    for(i=0; i<vertex; i++)
    {
        //初始化源点到其他各个顶点的最短路径长度
        PathLength[i]=AdjacentMatrix[source][i];

        sign[i]=0;

        //满足条件,说明顶点i与源点不相邻
        if(PathLength[i]==Infinity)
        {
            pioneer[i]=-1;

        }
        else
        {
            pioneer[i]=source;
        }

    }

    //初始化时,集合S中只有一个元素,源点
    PathLength[source]=0;
    sign[source]=1;

    for(i=0; i<vertex; i++)
    {
        int temp=Infinity;

        int t=source;




        for(j=0; j<vertex; j++)
        {
            if((!sign[j]) && (PathLength[j]<temp))
            {
                t=j;
                temp=PathLength[j];
            }
        }

        if(t==source) break;

        sign[t]=1;


        for(j=0; j<vertex; j++)
        {
            if((!sign[j]) && (AdjacentMatrix[t][j]!=Infinity))
            {
                if(PathLength[j]>(PathLength[t]+AdjacentMatrix[t][j]))
                {

                    PathLength[j]=PathLength[t]+AdjacentMatrix[t][j];
                    pioneer[j]=t;
                }
            }
        }

    }


}

void find(int pineer[MaxSize], int i, int AdjacentMatrix[MaxSize][MaxSize])
{
    while(pineer[i]!=-1)
    {
        //反向的
        printf("(%d, %d)%d ", pineer[i], i, AdjacentMatrix[pineer[i]][i]);
        i=pineer[i];
    }
}

int main(void)
{
    int AdjacentMatrix[MaxSize][MaxSize]={Infinity,8,32,Infinity,Infinity,
                            12,Infinity,16,15,Infinity,
                            Infinity,29,Infinity,Infinity,13,
                            Infinity,21,Infinity,Infinity,7,
                            Infinity,Infinity,27,19,Infinity
                            };
    int vertex=MaxSize, i;

    int source=3;

    int PathLength[MaxSize];

    int pioneer[MaxSize];//记录前顶点

    for(i=0; i<MaxSize; i++)
    {
        //初始化前顶点为无穷大
        pioneer[i]=Infinity;
    }

    printf("请输入源点(0~4):");

    scanf("%d", &source);

    printf("\n最短路径和长度\n");

    Dijkstra(vertex, source, PathLength, AdjacentMatrix, pioneer);

    for(i=0; i<vertex; i++)
    {
        if(i==source) continue;

        printf("\n源点%d到顶点%d : %d ", source, i, PathLength[i]);
        find(pioneer, i, AdjacentMatrix);
        printf("\n");
    }


    return 0;
}


仰望星空...........不忘初心!
2013-06-17 18:23
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
其实把bool变成int,true 变成1,false 变0就行了....!

仰望星空...........不忘初心!
2013-06-17 18:24
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 15楼 Susake
图片附件: 游客没有浏览图片的权限,请 登录注册

三十年河东,三十年河西,莫欺少年穷!
2013-06-17 18:28
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 15楼 Susake
错误确实少了很多  但还有


你们都能运行么?

三十年河东,三十年河西,莫欺少年穷!
2013-06-17 18:29
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
VC..唉....我用过一次再也用过了...好吧...我没那个编译器...无法调试了...!每次我好端端的程序给其他用VC的都报错...实在无语!

仰望星空...........不忘初心!
2013-06-17 18:32
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
是的..2种方法都是2楼的结果...!

仰望星空...........不忘初心!
2013-06-17 18:33
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:0 
华丽丽的飘过~

Edsger Dijkstra:算法+数据结构=程序
2013-06-17 18:34
快速回复:用迪杰斯特拉算法(Dijkstra)实现图的最短路径 C语言编写
数据加载中...
 
   



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

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