边连通度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的:给定一个图(有向或无向),求它的边连通度。
二、实验内容:
1)题目:求5阶完全图的边连通度。
2)C语言代码:
# include
# define m -1
# define n 5 /*已知图的点数*/
void main()
{
int f[n+1][n+1],content[n+1][n+1],b1[n+1][n+1]; /*f表示流量,conten 表示弧上的容量,b1表示单位费用*/
int kg[n+1][n+1];/*保存任意两点间最大的内部边不交的路的条数*/
int c[n+1][n+1]={0};/*最小费用最大流中的w(f)*/
int d[n+1]={0}; /*存放权*/
int s[2*n+2]={0},s2[2*n+2]={0},s1[2*n+2]={0},r1;
int i,j,k,p,l,flag,a ,u,cta,flag1,flag2,p1;
int b,t; /*b,t分别代表路的起点和终点的角标*/
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
kg[i][j]=0;
}
}
for(b=1;b<=n;b++)
{
for(t=b+1;t<=n;t++)
{
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
f[i][j]=m; content[i][j]=m;b1[i][j]=m;
}
}
for(i=1;i<=2*n;i++)
{
s[i]=0;s2[i]=0;
}
for(i=1;i d[i]=0; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i!=j) { content[i][j]=1;b1[i][j]=1;f[i][j]=1; /*利用已知图构造网络*/ } } } do { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(content[i][j]==1 && i { if(f[i][j] c[i][j]=b1[i][j]; if(f[i][j]==content[i][j]) c[i][j]=m; if(f[i][j]>0) c[j][i]=m; if(f[i][j]==0) c[j][i]=m; } if(content[i][j]==1 && i>j) { if(f[i][j] c[i][j]=b1[i][j]; if(f[i][j]==content[i][j] ) { if(c[i][j]!=b1[i][j]) c[i][j]=m; if(c[i][j]==b1[i][j]) c[i][j]=b1[i][j]; } if (f[i][j]>0 || f[i][j]==0) { if(c[j][i]!=b1[j][i]) c[j][i]=m; if(c[j][i]==b1[j][i]) c[j][i]=b1[j][i]; } } } } /*利用当前流构造图w(f)*/ for (i=1;i c[i][b]=m; p=0; for(i=1;i<=2*n;i++) { s[i]=0;s2[i]=0; } for(i=1;i d[i]=0; s[1]=b; do { p=p+1; a=100;k=0;l=0; for (i=1;s[i]!=0;i=i+1) { for (j=1;j<=n;j++) { if (c[s[i]][j]>0 && d[s[i]]+c[s[i]][j] { a=c[s[i]][j]+d[s[i]]; k=s[i]; l=j; } } } flag=0; d[l]=a; for(i=1;i<2*n+2;i++) { if (s[i]!=0 && s[i+1]==0) { if(i==1) { s[i]=k;s[i+1]=l;i=2*n+2; } else { s[i+1]=k; s[i+2]=l; i=2*n+2; } } } for (i=1;i c[i][l]=m; c[k][l]=m; c[l][k]=m; for (i=1;s[i]!=0;i++) {