| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3432 人关注过本帖
标题:求教这个弗洛伊德算法求最短路径的程序哪里错了。
只看楼主 加入收藏
qq826647235
Rank: 2
等 级:论坛游民
帖 子:37
专家分:10
注 册:2016-5-4
结帖率:63.64%
收藏
 问题点数:0 回复次数:2 
求教这个弗洛伊德算法求最短路径的程序哪里错了。
求教这个弗洛伊德算法求最短路径的程序哪里错了。
自己测试了几组数据都没错。。但是判题的有的数据过不去,也不知道是什么数据




#include<stdio.h>

int n;
int D[100][100];
int area[100][100];
int street[100][100][100];

void floyd()
{
    int a,b,c;
    int i,j,k;
    int sum;
    for(k=0;k<n;k++)
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
            {
                sum=D[i][k]+D[k][j];
                if(sum<D[i][j])
                {
                    D[i][j]=sum;
                    for(a=0;;a++)
                    {
                        if(street[i][k][a]==-1)
                        break;
                    }
                    for(b=0;b<a-1;b++)
                    {
                        street[i][j][b]=street[i][k][b];
                    }
                    for(a=0;;b++,a++)
                    {
                        if(street[k][j][a]==-1) break;
                        street[i][j][b]=street[k][j][a];
                    }
                }
            }
}

int main()
{
    int m;
    int a,b,c;
    int StartNode,EndNode;
    scanf("%d",&n);
    for(a=0;a<n;a++)
        for(b=0;b<n;b++)
            for(c=0;c<100;c++)
            {
                street[a][b][c]=-1;
            }
    for(a=0;a<n;a++)
        for(b=0;b<n;b++)
        {
            street[a][b][0]=a;
            street[a][b][1]=b;
        }
    for(a=0;a<n;a++)
        for(b=0;b<n;b++)
        {
            scanf("%d",&area[a][b]);
        }
    for(a=0;a<n;a++)
        for(b=0;b<n;b++)
        {
            D[a][b]=area[a][b];
        }
    floyd();

    scanf("%d",&m);
    for(a=0;a<m;a++)
    {
        scanf("%d%d",&StartNode,&EndNode);
        for(b=0;;b++)
        {
            if(street[StartNode][EndNode][b]==-1) break;
            printf("%d\n",street[StartNode][EndNode][b]);
        }
    }

    return 0;
}
搜索更多相关主题的帖子: 弗洛伊德 弗洛伊德 
2016-05-22 14:38
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
建议发到C语言板块。。。
int main()
{
    int m;
    int a,b,c;
    int StartNode,EndNode;
    scanf("%d",&n);
    for(a=0;a<n;a++)
        for(b=0;b<n;b++)
            for(c=0;c<100;c++)
            {
                street[a][b][c]=-1;
            }
最短路径问题你在初始化的时候就搞错了。。。应该初始化成“无穷大”!(不然像a-b,b-c就不能推出a-c来了),无穷大应该多大就取决于你的数据了。

φ(゜▽゜*)♪
2016-06-27 23:46
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 2楼 书生牛犊
http://developer.

你对floyd算法的理解估计还不够。可以找找博客看看

自己测试了几组数据都没错。。但是判题的有的数据过不去,也不知道是什么数据
你测试的数据一定是完全联通的图,即任意两个点都是直接连通的。而一旦给你的数据中有一条路没联通,整张图估计就都废了


[此贴子已经被作者于2016-6-27 23:49编辑过]


φ(゜▽゜*)♪
2016-06-27 23:47
快速回复:求教这个弗洛伊德算法求最短路径的程序哪里错了。
数据加载中...
 
   



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

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