多段图最短路径_动态规划

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

多段图最短路径【源程序】

//本程序测试用例为作业题

#include

//#define LOCAL

constint MAX = 10000;

int c[100][100];//图的存储矩阵

int cost[100], path[100];

intCreateGraph()

{

#ifdef LOCAL

freopen("data.in", "r", stdin);

freopen("data.out", "w", stdout);

#endif // LOCAL

inti, j, k;

int weight;//权重

intvnum, arcnum;//顶点数,边数

printf("请输入顶点的个数和边的个数:");

scanf("%d%d",&vnum, &arcnum);

for(i=0; i

for(j=0; j

{

c[i][j]=MAX;

}

printf("请输入边的两个顶点和权值:\n");

for(k=0; k

{

scanf("%d%d%d",&i, &j, &weight);

c[i][j]=weight;

}

return vnum;

}

intBackPath(int n)//求n个顶点的多段图的最短路径

{

for(inti=0; i

{

cost[i]=MAX;

path[i]=-1;

}

cost[n-1]=0;//对于最后一个顶点要进行特殊的初始化path[n-1]=-1;

for(inti=n-2; i>=0; i--)

for(int j=i+1; j

if(c[i][j]+cost[j]

{

cost[i]=c[i][j]+cost[j];

path[i]=j;

}

printf("最短路径为:\n");

printf("0");

inti=0;

while(path[i]>=0)

{

printf("->%d",path[i]);

i=path[i];

}

printf("\n\n");

return cost[0];

}

int main()

{

int a = CreateGraph();

printf("最短路径长度为:%d\n\n", BackPath(a));

printf("cost数组为:\n");

for(inti=0; i

printf("%3d",cost[i]);

printf("\n\n");

printf("path数组为:\n");

for(inti=0; i

printf("%3d",path[i]);

printf("\n");

return 0;

}

【运行结果】

相关文档
最新文档