热情斑竹
能把下面这个程序改成我那个题目要求的程序吗?
#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( );
}