| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 408 人关注过本帖
标题:新手出来,求解弗洛伊德算法问题
只看楼主 加入收藏
dengyuan
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-12-15
收藏
 问题点数:0 回复次数:0 
新手出来,求解弗洛伊德算法问题
自己写了个有向图的弗洛伊德算法,遇到问题,请大家帮忙找一下,感谢!
问题貌似出在输出路径及路径长度上,求解。
typedef char Vextype;             //顶点类型
#define VEX_NUM 6
typedef struct
{
    Vextype vexs[VEX_NUM];        //顶点向量
    int arcs[VEX_NUM][VEX_NUM];   //邻接矩阵
    int vexnum;                   //顶点数
    int arcnum;                   //弧数
}Mgraph;

#define MAXINT 65536
void Floyd(int cost[][VEX_NUM],Mgraph Gn,int path[][VEX_NUM])      
{
    /*cost数组存储带权邻接矩阵,path[i][j]表示顶点vj的前驱顶点序号是i(顶点vi)*/
    int i,j,k;
    for(i=0;i<VEX_NUM;i++)
    {
        for(j=0;j<VEX_NUM;j++)
        {
            Gn.arcs[i][j]=cost[i][j];
            if(i==j)
                path[i][j]=-1;
            else
            {
                if(cost[i][j]<MAXINT)
                    path[i][j]=i;
                else
                    path[i][j]=0;
            }
        }
    }
    for(k=0;k<VEX_NUM;k++)
        for(i=0;i<VEX_NUM;i++)
            for(j=0;j<VEX_NUM;j++)
                if(Gn.arcs[i][j]>(Gn.arcs[i][k]+Gn.arcs[k][j]))
                {
                    Gn.arcs[i][j]=Gn.arcs[i][k]+Gn.arcs[k][j];
                    path[i][j]=path[k][j];
                }
}

#include<stdio.h>
#include"Mgraph.h"
#include"Floyd.h"

int main()
{
    int i,j,k;
    Mgraph g;
    int cost[VEX_NUM][VEX_NUM];
    int path[VEX_NUM][VEX_NUM];
    g.vexs[0]='A',g.vexs[1]='B',g.vexs[2]='C',g.vexs[3]='D',g.vexs[4]='E',g.vexs[5]='F';//定义图
    for(i=0;i<VEX_NUM;i++)
        for(j=0;j<VEX_NUM;j++)      
        {
            g.arcs[i][j]=MAXINT;
            cost[i][j]=MAXINT;
        }
    g.arcs[0][2]=10,g.arcs[0][4]=30,g.arcs[0][5]=100,g.arcs[1][2]=5,
    g.arcs[2][3]=50,g.arcs[3][5]=10,g.arcs[4][3]=20,g.arcs[4][5]=60;
    g.vexnum=g.arcnum=VEX_NUM;
   
   
    for(i=0;i<VEX_NUM;i++)
    {
        printf("%c\t",g.vexs[i]);
  
        for(j=0;j<VEX_NUM;j++)
        {
            printf("%d\t",g.arcs[i][j]);
        }
        printf("\n");
    }
    printf("\n");

    Floyd(cost,g,path);

    for(k=0;k<g.vexnum;k++)
    {
        for(i=0;i<g.vexnum;i++)
        {
            printf("Path %c to %c:\n",g.vexs[k],g.vexs[i]);
            if(path[i][k]!=-1 )  
            {
                for(j=0;path[i][j]!=-1;j++)
                {
                    if (j!= 0)
                        printf("→");
                    printf("%c",g.vexs[path[i][j]]);
                }
                printf("\n");
            }
        }
        printf("Length:%d\n",dist[i]);
        printf("\n");
    }
    return 0;
}

搜索更多相关主题的帖子: 矩阵 弗洛伊德 
2011-12-15 22:42
快速回复:新手出来,求解弗洛伊德算法问题
数据加载中...
 
   



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

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