区域交通指南图
[基本要求]
可用一个带权有向图表示某区域的公交线路网,图中顶点表示区域内的重要场所,弧表示公交线路,弧上的权表示票价。要求:
1、采用键盘输入的方式接受用户输入的公交线路网(该网应该是公交网的子网 ,只需要包括重要场所及其之间存在的弧),要有交好的交互和容错处理(当输入错误数据时能引导用户输入正确的数据,考虑检查输入顶点和弧不能够成强连通图的情况)。
2、选择恰当的存储结构实现该有向网的存储。(报告中要讨论选择这种存储结构的原因,简单比较不同存储结构的差异)。
=======================================================================================
#define maxvex 100
#define max 32767
struct vertex
{int num;
char data;
}vertex;
typedef struct adjmax
{struct vertex vexs[maxvex];
int edges[maxvex][maxvex];
}adjmax;
adjmax creategraph(int n,int e)
{int i,j,k,w;
char b,t;
adjmax adj;
for(i=0;i<n;i++)
{printf("\tthe %d vertex's massege is:",i);
scanf("%c",&adj.vexs[i].data);
adj.vexs[i].num=i;
}
for(i=0;i<n;j++)
for(j=0;j<n;j++)
adj.edges[i][j]=0;
for(k=0;k<e;k++)
{
printf("input the %d edge's jumping-off point, the end-point and the dist",k);
scanf("%c,%c,%d",&b,&t,&w);
i=0;
while(i<n && adj.vexs[i].data!=t) i++;
if(i>=n)
{printf("input the jumping-off point is inexistent.\n");
exit(0);
}
j=0;
while(j<n && adj.vexs[j].data!=t) j++;
if(j>=n)
{printf("input the end point is inexistent.\n");
exit(1);
}
adj.edges[i][j]=w;
}return(adj);
}
void shortpath(cost,dist,path,n,v0)
int cost[maxvex][maxvex],dist[maxvex],path[maxvex],n,v0;
{int s[maxvex],u,vnum,w,wm;
for(w=1;w<n;w++)
{dist[w]=cost[v0][w];
if(cost[v0][w]<max)path[w]=v0;
}
for(w=1;w<=n;w++) s[w]=0;
s[v0]=1;
vnum=1;
while(vnum<n-1)
{wm=max;
u=v0;
for(w=1;w<=n;w++)
if(s[w]==0 && dist[w]<wm)
{u=w;wm=dist[w];
}
s[u]=1;vnum++;
for(w=1;w<=n;w++)
if(s[w]==0 && dist[u]+cost[u][w]<dist[w])
{dist[w]=dist[u]+cost[u][w];
path[w]=u;}
}
}
void printpath(dist,path,s,n,v0)
int dist[maxvex],path[maxvex],s[maxvex],n,v0;
{int i,k;
for(i=1;i<=n;i++)
if(s[i]==1)
{k=i;
while(k!=v0)
{printf("%d←",k);
k=path[k];
}
printf("%d",k);
printf("%d",dist[i]);
}
else
{printf("%d←%d",i,v0);
printf("∞");
}
}
main()
{adjmax g;
int n,e,v0;
int dist[maxvex],path[maxvex],s[maxvex];
printf("input the No. of vertex(n) and the No. of edges(e):");
scanf("%d,%d",&n,&e);
g=creategraph(n,e);
printf("input the headspring is: ");
scanf("%d",&v0);
请问要如何修改.................