| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 341 人关注过本帖
标题:求助!程序有一段执行不出来!
只看楼主 加入收藏
lixuexihao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-28
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:2 
求助!程序有一段执行不出来!
#include<stdio.h>
#include<stdlib.h>
#define MVNum 100
#define Maxint 32767
enum boolean{FALSE,TRUE};
typedef char VertexType;
typedef int Adjmatrix;
typedef struct{
 VertexType vexs[MVNum];
 Adjmatrix arcs[MVNum][MVNum];
 }MGraph;
void CreateMGraph(MGraph *G,int n,int e)
{int arcs[MVNum][MVNum];
  int i,j,k,w;
  for(i=1;i<=n;i++)
  G->vexs[i]=(char)i;
  for(i=1;i<=n;i++)
   for(j=1;j<=n;j++)
    G->arcs[i][j]=Maxint;
   printf("输入 %d 条边的 i,j,w: \n",e);
   for(k=1;k<=e;k++){
   scanf("%d,%d,%d",&i,&j,&w);
   G->arcs[i][j]=w;
   }
   printf("有向图的存储结构建立完毕!\n");
}


  void Dijkstra(MGraph *G,int v1,int n)
{
int D2[MVNum],P2[MVNum];
 int v,i,w,min;
 enum boolean S[MVNum];
 for(v=1;v<=n;v++){
   S[v]=FALSE;
   D2[v]=G->arcs[v1][v];
   if(D2[v]<Maxint)
   P2[v]=v1;
   else
     P2[v]=0;
     }
   D2[v1]=0;S[v1]=TRUE;
   for(i=2;i<n;i++){
   min=Maxint;
   for(w=1;w<=n;w++)
   if(!S[w] && D2[w]<min)
    {v=w;min=D2[w];}
   S[v]=TRUE;
   for(w=1;w<=n;w++)
    if(!S[w]&&(D2[v]+G->arcs[v][w]<D2[w])){
       D2[w]=D2[v]+G->arcs[v][w];
       P2[w]=v;
       }//End_if
    }//End_for
    printf("路径长度  路径\n");
    for(i=1;i<=n;i++){
     printf("%5d",D2[i]);
     printf("%5d",i);v=P2[i];
     while(v!=0){
       printf("<-%d",v);
       v=P2[v];
       }
       printf("\n");
       }
     }


     void Floyd(MGraph *G,int n)
     { int D[MVNum][MVNum],P[MVNum][MVNum];
      int i,j,k,v,w;
      for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
      {
       if(G->arcs[i][j]!=Maxint)
       P[i][j]=j;
       else
     P[i][j]=0;
    D[i][j]=G->arcs[i][j];
       }
       for(k=1;k<=n;k++)
     {for(i=1;i<=n;i++)
       for(j=1;j<=n;j++)
         {if(D[i][k]+D[k][j]<D[i][j]){
          D[i][j]=D[i][k]+D[k][j];
          P[i][j]=P[i][k];
     }
       }
     }
   }


 int D1[MVNum],P1[MVNum];
 int D[MVNum][MVNum],P[MVNum][MVNum];


 void main()
 {MGraph *G;
  int m,n,e,v,w,k;
  int xz=1;
  G=(MGraph *)malloc(sizeof(MGraph));
  printf("简单的模拟兰州交通网络图\n");
  printf("输入图中顶点个数和边数 n,e: ");
  scanf("%d,%d",&n,&e);
  CreateMGraph(G,n,e);
  while(xz!=0){
     printf("*****求地方之间的最短路径*****\n");
     printf("==============================\n");
     printf("1,求一个地方到所有地方的最短路径 \n");
     printf("2,求任意两个地方之间的最短路径 \n");
     printf("===============================\n");
     printf(" 请选择: 1 or 2,选择 0 退出: ");
     scanf("%d",&xz);
     if(xz==2){
     Floyd(G,n);
     printf("输入起点和终点: v,w: ");
     scanf("%d,%d",&v,&w);
     k=P[v][w];
     if(k==0)
       printf("顶点 %d 到 %d 无路径! \n",v,w);
     else
     {printf("从顶点 %d 到 %d 的最短路径是: %d",v,w,v);
     while(k!=w){
       printf("->%d",k);
       k=P[k][w];
     }
     printf("->%d",w);
     printf(" 路径长度: %d\n",D[v][w]) ;
     }
  }
  else
   if(xz==1){
    printf("求单源路径,输入起点 v: ");
    scanf("%d",&v);
    Dijkstra(G,v,n);
    }
    }
     printf("结束求最短路径!\n");
     }

//图:n=6e=8
i,j,w:
1,2,5,
1,6,10
2,3,12
2,4,14
2,5,8
3,4,6
5,3,4
5,6,7



调用Floyd算法的第二种形式 任意2地之间的最短距离出不来  每次都是“——到——无路径”!!!怎么办啊
搜索更多相关主题的帖子: include 
2010-07-02 17:08
lixuexihao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-28
收藏
得分:0 
难道没人帮忙吗?
2010-07-06 07:17
n272367953
Rank: 2
等 级:论坛游民
帖 子:47
专家分:53
注 册:2010-4-14
收藏
得分:10 
你不说清楚怎么帮啊!!!
2010-07-06 12:10
快速回复:求助!程序有一段执行不出来!
数据加载中...
 
   



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

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