| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 860 人关注过本帖
标题:这个算法是什么意思?
取消只看楼主 加入收藏
曲终人散
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-12-2
结帖率:100%
收藏
 问题点数:0 回复次数:0 
这个算法是什么意思?
void Floyd(SGuide *G)//所有路径的函数
{
    int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];//通过以下循环得到起始点到其它地点的路径和距离
    for(v=0;v <G->vexnum;v++)
        for(w=0;w <G->vexnum;w++)
        {
            D[v][w]=G->arcs[v][w].way;
            for(u=0;u <G->vexnum;u++)
                p[v][w][u]=0;
            if(D[v][w] <DERCTION)
            {
                 p[v][w][v]=1;p[v][w][w]=1;
            }
        }
        for(u=0;u <G->vexnum;u++)
            for(v=0;v <G->vexnum;v++)
                for(w=0;w <G->vexnum;w++)
                    if(D[v][u]+D[u][w] <D[v][w])
                    {
                        D[v][w]=D[v][u]+D[u][w];
                        for(i=0;i <G->vexnum;i++)
                            p[v][w][i]=p[v][u][i]||p[u][w][i];
                    }
                    while(flag)
                    {
                        printf("请输入出发点和目的地的编号:");
                        scanf("%d%d",&k,&j);
                        if(k <0||k>G->vexnum||j <0||j>G->vexnum)
                        {
                            printf("校区编号不存在!请重新输入出发点和目的地的编号:");
                            scanf("%d%d",&k,&j);
                        }
                        if(k>=0&&k <G->vexnum&&j>=0&&j <G->vexnum)
                            flag=0;
                    }
                    printf("%s",G->vexs[k].name);
                    for(u=0;u <G->vexnum;u++)
                        if(p[k][j][u]&&k!=u&&j!=u)
                            printf("-->%s",G->vexs[u].name);
                        printf("-->%s",G->vexs[j].name);
                        printf(" 总路线长%dm\n",D[k][j]);
}
void ShortPath(SGuide * G) //定义最短路径的算法函数
{
    int v,w,i,min,t=0,x,flag=1,v0;
    int final[20], D[20], p[20][20];
    while(flag)
    {
        printf("请输入一个起始校区编号:");
        scanf("%d",&v0);
        if(v0 <0||v0>G->vexnum)
        {
            printf("校区编号不存在!请重新输入景点编号:");
            scanf("%d",&v0);
        }
        if(v0>=0&&v0 <G->vexnum)
            flag=0;
    }
    for(v=0;v<G->vexnum;v++)
    {
        final[v]=0;
        D[v]=G->arcs[v0][v].way;
        for(w=0;w <G->vexnum;w++)
            p[v][w]=0;
        if(D[v] <DERCTION)
        {
            p[v][v0]=1;p[v][v]=1;
        }
    }
    D[v0]=0;final[v0]=1;
    for(i=1;i <G->vexnum;i++)
    {
        min=DERCTION;
        for(w=0;w <G->vexnum;w++)
            if(!final[w])
                if(D[w] <min){v=w;min=D[w];
                }
                 final[v]=1;
                 for(w=0;w <G->vexnum;w++)
                     if(!final[w]&&(min+G->arcs[v][w].way <D[w]))
                     {
                         D[w]=min+G->arcs[v][w].way;
                         for(x=0;x <G->vexnum;x++)
                             p[w][x]=p[v][x];
                         p[w][w]=1;
                     }
    }
    for(v=0;v <G->vexnum;v++)
    {
        if(v0!=v) printf("%s",G->vexs[v0].name);
        for(w=0;w <G->vexnum;w++)
        {
            if(p[v][w]&&w!=v0)  
                printf("-->%s",G->vexs[w].name);
            t++;
        }
        if(t>G->vexnum-1&&v0!=v)
            printf("      总路线长%dKM\n\n",D[v]);
    }
}
各位大虾帮我解释一下这两个算法是什么意思?
SGuide InGuide(void)//校区介绍,对各校区的简介
这个函数名和c语言中的函数名怎么不一样啊?解释一下。
搜索更多相关主题的帖子: 算法 
2010-06-28 16:58
快速回复:这个算法是什么意思?
数据加载中...
 
   



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

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