| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1390 人关注过本帖
标题:迪杰斯特拉算法源码---编译通过,有运行结果,但是结果不正确----高手给看看 ...
取消只看楼主 加入收藏
xiaofkg
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-17
收藏
 问题点数:0 回复次数:3 
迪杰斯特拉算法源码---编译通过,有运行结果,但是结果不正确----高手给看看
#include <stdio.h>
#include <limits.h>
#define MAX_VERTEX_NUM 10
#define OK 1
int Visited[MAX_VERTEX_NUM];
typedef char vextype;
typedef int adjtype;
typedef struct
{ vextype vexs[MAX_VERTEX_NUM];
  adjtype arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
  int vexnum,arcnum;
 }MGraph;
int p[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int d[MAX_VERTEX_NUM];




void shortestpath(MGraph *g,int v0)
{int v,w,i,min,j;
 int final[MAX_VERTEX_NUM];
 for(v=0;v<g->vexnum;++v)/*初始化路径*/
 {final[v]=0;
  d[v]=g->arcs[v0][v];

  for(w=0;w<g->vexnum;++w)
    p[v][w]=0;

  if(d[v]<INT_MAX)
    p[v][v0]=p[v][v]=1;


 } /*初始化路径*/
 d[v0]=0;final[v0]=1;
 /*搜索路径*/
 for(i=1;i<g->vexnum;++i)
 {min=INT_MAX;
   for(w=0;w<g->vexnum;++w)
     if(!final[w]&&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]<d[w]))
     {d[w]=min+g->arcs[v][w];
     for(j=0;j<g->vexnum;++j)
         p[w][j]=p[v][j];
     p[w][w]=1;

     }
 }


}



int LocateVex(MGraph *G,char u)
{int i;
 for(i=0;i<G->vexnum;++i)
    if(G->vexs[i]==u)
      return i;
     return -1;
}

CreateDN(MGraph *ga)        /* 建立有向网络 */

{
int i,j,k;
int n,e;
char v1,v2;
int w;
printf("input the vexnum,arcnum:\n");
scanf("%d%d",&(ga->vexnum),&(ga->arcnum));
getchar();
n=ga->vexnum;
e=ga->arcnum;
printf("input the vex:\n");
for(i=0;i<n;i++)
{scanf("%c",&ga->vexs[i]);
 }
                             /*读入顶点信息,建立顶点表*/
for(i=0;i<n;i++)
for(j=0;j<n;j++)
ga->arcs[i][j]=INT_MAX;     /*邻接矩阵初始化*/
getchar();
 for(k=0;k<e;k++)   /*读入e条边*/
 {
 printf("input the arc information:\n");
   scanf("%c,%c,%d%*c",&v1,&v2,&w);/*读入边(vi,vj)上的权值w*/

   i=LocateVex(ga,v1);
   j=LocateVex(ga,v2);
   ga->arcs[i][j]=w;

 }


}
main()
{MGraph g;
 int i,k,j;

 CreateDN(&g);
  for(i=0;i<g.vexnum;++i)
  { for(j=0;j<g.vexnum;++j)
    printf("%10d  ",g.arcs[i][j]);
    printf("\n");
    }
 i=LocateVex(&g,g.vexs[0]);


 shortestpath(&g,i);
 printf("the shortest path what %c get to other vex:\n",g.vexs[0]);
   for(i=0;i<g.vexnum;i++)
    if(i!=0)
    printf("%c ---- %c:%d\n",g.vexs[0],g.vexs[i],d[i]);


  printf("p matrix:\n");
   for(i=0;i<g.vexnum;i++)
    { for(k=0;k<g.vexnum;k++)
     printf("%d ",p[i][k]);
     printf("\n");
     }
    /* if(p[i][k]==1)
       {printf("%c to %c get through:",g.vexs[0],g.vexs[i]);
        printf("%c ",g.vexs[k]);
        printf("\n");
       } */
 getch();
}
输出结果不正确,高手给指导一下,谢谢了。。。。
搜索更多相关主题的帖子: 迪杰斯特拉 源码 算法 结果 
2008-01-04 17:43
xiaofkg
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-17
收藏
得分:0 
自己顶一下,高手不吝赐教。
2008-01-04 20:38
xiaofkg
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-17
收藏
得分:0 
自己再顶一下,高手不吝赐教。
2008-01-05 08:53
xiaofkg
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-17
收藏
得分:0 
自己再顶一下,高手不吝赐教。
2008-01-05 16:44
快速回复:迪杰斯特拉算法源码---编译通过,有运行结果,但是结果不正确----高手 ...
数据加载中...
 
   



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

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