📄 新建 文本文档 (3).txt
字号:
附录:Floyd算法的C#实现
#include<stdio.h>
#define N 10
#define M 10000
void main()
{
int r[N][N],i,j,k;
int d[N][N]={0,50,M,40,25,M,30,M,50,M,
50,0,30,M,35,50,M,60,M,M,
M,30,0,15,M,30,50,25,M,60,
40,M,15,0,45,30,55,20,40,65,
25,15,M,45,0,60,10,30,M,55,
M,50,30,30,60,0,25,55,35,M,
30,M,50,M,10,25,0,30,45,60,
M,60,25,20,30,55,30,0,10,M,
20,M,M,40,M,15,25,45,0,20,
35,20,10,45,20,M,60,M,30,0,};
for(i=0;i<N;i++)
for(j=0;j<N;j++)
r[i][j]=j;
for(k=0;k<N;k++)
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(d[i][k]+d[k][j]<d[i][j])
{
d[i][j]=d[i][k]+d[k][j];
r[i][j]=k;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%3d ",d[i][j]);
printf("\n");
}
printf("\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%2d ",r[i][j]+1);
printf("\n");
}
}
"改良圈"算法的C#实现
#include<stdio.h>
#define N 10
#define M 10000
void main()
{
int r[N][N],i,j,k,t,p,m,s=0;;
int d[N][N]={0,50,M,40,25,M,30,M,50,M,
50,0,30,M,35,50,M,60,M,M,
M,30,0,15,M,30,50,25,M,60,
40,M,15,0,45,30,55,20,40,65,
25,15,M,45,0,60,10,30,M,55,
M,50,30,30,60,0,25,55,35,M,
30,M,50,M,10,25,0,30,45,60,
M,60,25,20,30,55,30,0,10,M,
20,M,M,40,M,15,25,45,0,20,
35,20,10,45,20,M,60,M,30,0,},a[N][N],c[N]={0,4,6,1,3,8,2,5,7,9};
for(i=0;i<N;i++)
for(j=0;j<N;j++)
r[i][j]=j;
for(k=0;k<N;k++)
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(d[i][k]+d[k][j]<d[i][j])
{
d[i][j]=d[i][k]+d[k][j];
r[i][j]=k;
}
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=d[i][j];
for(p=0;p<100;p++)
{
m=0;
for(i=1;i<N;i++)
for(j=i+2;j<N-1;j++)
if(a[c[i]][c[j]]+a[c[i+1]][c[j+1]]<a[c[i]][c[i+1]]+a[c[j]][c[j+1]])
{
m=1;
for(k=0;k<(j-i)/2;k++)
{
t=c[i+1+k];
c[i+1+k]=c[j-k];
c[j-k]=t;
}
for(i=0;i<N;i++)
printf("%d ",c[i]+1);
printf("\n");
}
if(m==0) break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -