如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
/*本程序是用F算法求最短的路由花费可计算的最大的路由结点数为100*//*运行环境:vc++6.0*/#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN100doublew[N][N],tempw[N][N];intr[N][N],tempr[N][N],i,j,k,m=7;voidTestAlgorithm();//测试算法是否正确doublemin(doublek1,doublek2);//求最小值voidInputTheNet();//输入路由节点及花费voidInitprint();//打印R0W0voidsavesw();//保存临时值voidresultw();//求W矩阵的值voidresultr();//求R矩阵的值//---主函------voidmain(){TestAlgorithm();//使用固定的路由花费测试算法是否正确InputTheNet();//输入路由节点及花费Initprint();//打印初始路由表(R0W0)savesw();//*保存WR矩阵的值for(k=0;k<m;k++){resultw();//求W矩阵resultr();//求R矩阵savesw();//保存RW矩阵的值}printf("\n");}//*********输入各点间的路由花费*************voidInputTheNet(){printf("\n\n请输入节点数:");scanf("%d",&m);printf("\n\n请输入各结点间的路由花费\n\n");for(i=0;i<m;i++){w[i][i]=0;for(j=i+1;j<m;j++){printf("第%d节点-->第%d节点:",i+1,j+1);scanf("%lf",&w[i][j]);}}for(i=0;i<m;i++)//转换成路由花费表{for(j=0;j<i;j++){w[i][j]=w[j][i];}}}//*********打印你输入的路由表*********************voidInitprint(){printf("\nW0矩阵\n");for(i=0;i<m;i++){for(j=0;j<m;j++){if(w[i][j]==-1)printf("$");elseprintf("%9.1f",w[i][j]);}printf("\n");}printf("\n***********************************************\n");for(i=0;i<m;i++){for(j=0;j<m;j++){if(w[i][j]>0)r[i][j]=j+1;elser[i][j]=0;}}printf("\nR0矩阵\n");for(i=0;i<m;i++){for(j=0;j<m;j++)printf("%9d",r[i][j]);printf("\n");}}//*********************************************//*******************************************//求W矩阵voidresultw(){printf("\nW%d矩阵的值\n",k+1);for(i=0;i<m;i++){for(j=0;j<m;j++){w[i][j]=min(tempw[i][j],tempw[i][k]+tempw[k][j]);if(w[i][j]==-1)printf("$");elseprintf("%9.1f",w[i][j]);}printf("\n");}printf("----------------------------------------------------------------");}//求R矩阵voidresultr(){printf("\nr%d矩阵的值\n",k+1);for(i=0;i<m;i++){for(j=0;j<m;j++){if(w[i][j]==tempw[