📄 lianlu.c
字号:
#include "stdio.h"
#include "conio.h"
#define NO 10000
main()
{
struct
{int now[100];
int next[100];
int length[100];
}m[100]={0};
int n,i,r,j,w,a[100][100],s[100][100],b[100]={0},k;
printf("输入节点数n:\nn=");
scanf("%d",&n);
printf("输入有效连接长度,没连接的输入10000:\n");
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{printf("%d->%d:",i,j);
scanf("%d",&a[i][j]);
s[i][j]=a[i][j];
a[j][i]=a[i][j];
s[j][i]=a[j][i];
if(i==j)
{s[i][j]=0;
a[i][j]=0;
}
}
for(w=0;w<n;w++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{if(a[i][j]<NO)
if(i!=j)
if((w!=i)&&(w!=j))
if(a[i][j]+s[w][i]<s[w][j])
s[w][j]=a[i][j]+s[w][i];
}
for(i=0;i<n;i++)
for(w=0;w<n;w++)
{m[i].now[w]=w;
for(j=0,k=-1;j<n;j++)
{if(i==w)
{m[i].next[w]=w;m[i].length[w]=0;}
else if((a[i][j]<NO)&&(a[i][j]!=0))
{b[j]=a[i][j]+s[j][w];
if(k<0)
k=j;
else if(b[j]<b[k])
k=j;
m[i].next[w]=k;
m[i].length[w]=b[k];
}
}
}
printf("想要查看哪个路由:");
scanf("%d",&r);
printf(" 终点 距离 下一节点\n");
for(i=0;i<n;i++)
{printf("%4d%8d%9d",m[r].now[i],m[r].length[i],m[r].next[i]);
printf("\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -