如何让c语言实现这个这个程序呀?有解题思路,有例题,求结果?急,Floyed算法使用图的邻接矩阵A 进行n次迭代来计算每对顶点间的最短路径,迭代过程中得到一个矩阵序列A0 ,A1 ,⋯,An ,矩阵元素A
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/28 07:19:14
如何让c语言实现这个这个程序呀?有解题思路,有例题,求结果?急,Floyed算法使用图的邻接矩阵A 进行n次迭代来计算每对顶点间的最短路径,迭代过程中得到一个矩阵序列A0 ,A1 ,⋯,An ,矩阵元素A
如何让c语言实现这个这个程序呀?有解题思路,有例题,求结果?急,
Floyed算法使用图的邻接矩阵A 进行n次迭代
来计算每对顶点间的最短路径,迭代过程中得到一
个矩阵序列A0 ,A1 ,⋯,An ,矩阵元素An [ i,j]的值即
为从顶点i到顶点j的最短路径.首先在路径( i,j)
中插入顶点0,考虑路径( i,0,j) ,若该路径存在,比
较路径( i,j)和路径( i,0,j)的长度,取长度较短者作
为从顶点i到顶点j且中间顶点编号不大于0的最
短路径存入A1 [ i,j]中,记为( i,⋯,j) ,然后考虑路
径( i,⋯,1,⋯,j) ,求得从i到j且中间顶点编号不
大于1的最短路径存入A2 [ i,j].依此类推,逐个插
入图中的每个顶点,在k + 1次迭代时,矩阵Ak + 1 [ i,
j]的值为:
Ak + 1 [ i,j] =min
Ak [ i,j]
Ak [ i,k ] +Ak [ k,j]
其中Ak + 1 [ i,j]表示经过k + 1次迭代后得到的
值,等于从i到j且中间顶点编号不大于k的最短路
径长度.该算法复杂度为0 ( n3 ) .
下面是Floyed算法求每对顶点之间最短路径
的C语言程序,程序中矩阵A 用来进行n次迭代,
矩阵P用来记录路径,P [ i,j]为迭代过程中当前已
经求得的从顶点i到顶点j的最短路径上最后被插
入的那个顶点.
void Floyed (Graph G,int A [ n ] [ n ] ,int P[ n ] [ n ] )
{
int i,j,k;
for ( i = 0; i < n; i + + )
for ( i = 0; j < n; j + + )
{
A [ i ] [ j] = G[ i ] [ j ];
if (A [ i] [ j ] > 0)
P[ i ] [ j ] = i;
else
P[ i ] [ j ] = 0;
}
for ( k = 0; k < n; k + + )
for ( i = 0; i < n; i + + )
for ( j = 0; j < n; j + + )
if (A [ i ] [ k ] +A [ k ] [ j ]
如何让c语言实现这个这个程序呀?有解题思路,有例题,求结果?急,Floyed算法使用图的邻接矩阵A 进行n次迭代来计算每对顶点间的最短路径,迭代过程中得到一个矩阵序列A0 ,A1 ,⋯,An ,矩阵元素A
我不知道,这个题行不,因为用到了循环,是计算机C程序设计语言_第二版新版上面的例题:
#include <stdio.h>
/*当fahr = 0, 20,……,300时,分别打印华氏温度与摄氏温度对照表*/
main()
{
int fahr, celsius; /*定义两个整型变量:fahr,celsius*/
int lower, upper, step; /*还是定义整型变量:lower,upper,step*/
lower = 0; /*给lower赋初值*/
upper = 300; /*给upper赋初值*/
step = 20; /*给step赋初值*/
fahr = lower; /*把lower的值赋给fahr,你也可以直接给fahr赋个0*/
while (fahr <= upper) /*循环语句while的条件要求,fahr <= upper为真时,执行下面语句*/
{
celsius = 5 * (fahr-32) / 9; /*华氏转换成摄氏的公式*/
printf("%d\t%d\n",fahr, celsius); /*打印出fahrt celsius的值*/
fahr = fahr + step; /*在给fahr的值+20也就是step赋的值,在次进行循环*/
}
}