| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 905 人关注过本帖
标题:各位高人们 小弟有个编程题火急求助啊!
只看楼主 加入收藏
boy025
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-5-13
收藏
 问题点数:0 回复次数:3 
各位高人们 小弟有个编程题火急求助啊!
各位大哥们  小弟有个编程题求助啊
旅游导游系统问题
问题描述:假设一个旅游景区由n个不同景点组成(有向网),并用带权邻接矩阵表示,权值表示两个景点间的步行时间,试编写程序求任意两个景点间的最短步行时间。
时间很紧急啊   谢谢大哥大姐们      求源码
感激万分ing
搜索更多相关主题的帖子: 火急 
2005-05-13 13:46
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
最短路径算法:
假设你建立了带权邻接矩阵
void Path(AdjGurph G,int v0,int path[])
{
  int distance[255]
  int s[255];  
int n;
  n=getnum(这个是顶点的个数)例如你的顶点是 a,b,c,d那么顶点树就是 4;
  for(i=0;i<n;i++)
{
    distance[i]=G.getweight(v0,i);   getweight(是取顶点的权值)
    if(distancd[i]>0&&distance<Max) path[i]=v0;
else path[i]=-1;
      s[i]=0;
}

s[vo]=1;
for(i=1;i<n;i++)
{
   int min=max;
  int u;
for(j=1;j<n;j++)
if(distance[i]<min)
  {min=distance[i];
   u=j;
}
s[u]=1;

for(j=1;j<n;j++)
{
  if(s[u]!=1&&G.Getweight(u,j)<Max&&distance[u]+G.Getweight(u,j)<distance[j])
  distance[j]=distance[u]+G.Getweight(u,j);
  path[j]=u;
}
}

c++/C + 汇编 = 天下无敌
2005-05-13 16:14
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
MAX 是10000,我只说出了主要部分,邻接距阵自己写把

c++/C + 汇编 = 天下无敌
2005-05-13 16:20
boy025
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-5-13
收藏
得分:0 
热情斑竹    能把下面这个程序改成我那个题目要求的程序吗?
#include "math.h"
#define maxvex 100
#define max 6000
int n,p,m;
int i,j,k,w,v;
typedef struct graph
{
 int vexs[maxvex];
 int path[maxvex][maxvex];
}adjmax;
createdun()
{ adjmax adj;
 printf("the vexnum:\n");
 scanf("%d",&n);
 printf("the path:\n");
 scanf("%d",&p);
 m=n*(n-1)/2;
 if(p>m)
{ printf("error");
 goto exit;
}
 for(i=0;i<n;i++)
 adj.vexs[i]=i;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  adj.path[i][j]=max;
  for(k=0;k<p;k++)
{
 printf("the %d path:",k);
 printf("\n\t start:");
 scanf("%d",&i);
 printf("\n\t end:");
 scanf("%d",&j);
 printf("\n\t data:");
 scanf("%d",&w);
 if(i>=n)
{
 printf("error\n");
 goto exit;
}
 if(j>=n)
{
 printf("error\n");
 goto exit;
}
 adj.path[i][j]=adj.path[j][i]=w;
 printf("path[%d][%d]=%d\n",i,j,w);
}
exit: getch( );
}
shortestpath(int v,int w)
{
 adjmax adj;
 int min;
 int d[maxvex],p[maxvex][maxvex],s[maxvex];
 for(i=0;i<n;i++)
{
 s[i]=0;d[i]=adj.path[v][i];
 for(j=0;j<n;j++) p[i][j]=0;
 if(d[i]<max)
{
 p[i][v]=1;
 p[i][i]=1;
}
}
 d[v]=0;s[v]=1;
 for(i=1;i<n;i++)
{
 min=max;
 for(j=0;j<n;j++)
  if(!s[j])
   if(d[j]<min)
{
 k=j;
 min=d[j];
}
 s[k]=1;
 for(j=0;j<n;j++)
  if(!s[j]&&(min+adj.path[k][j]<d[j]))
{
 d[j]=min+adj.path[k][j];
 p[j][j]=1;
}
}
 printf("\nthe shortest path is:");
 for(i=0;i<n;i++)
 if(p[w][i])
{
 k=i;
 printf("%d ",k);
}
printf("\npath[%d][%d]=%d\n",v,w,d[w]);
}
main()
{
 int a,b;
 createdun();
 printf("\ninput the start point:");
 scanf("%d",&a);
 printf("\ninput the end point:");
 scanf("%d",&b);
 shortestpath(a,b);
 getch( );
}

2005-05-13 19:23
快速回复:各位高人们 小弟有个编程题火急求助啊!
数据加载中...
 
   



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

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