图论 k 壳分解的问题,希望大家能帮忙解决!感激不尽!
关于图论中k壳分解程序,求大神指点。。。我写的#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define E 4 //输入边(更改数据,要更改节点数)
#define kmax 2
FILE *fp;
FILE *fp3;
int A[E][2]={0};
int ks[kmax][999]={0};
int k[E][E]={0};
int d[E]={0};
void main()
{
int i,j,a,b=0,m=0,n,t;
fp=fopen("自实验数据.txt","r");//输入网络.....................输入网络
fp3=fopen("ks分解.txt","w");//result
for (i=0;i<E;i++)
{
fscanf(fp,"%d %d",&A[i][0],&A[i][1]);
A[i][0]=A[i][0]-1;
A[i][1]=A[i][1]-1;
}
fclose(fp);
for(i=0;i<E;i++)
{
k[A[i][0]][A[i][1]]=1;
k[A[i][1]][A[i][0]]=1;
}//k转化为邻接矩阵,A为点邻矩阵
for(t=1;t<E;t++)
{
for(m=0;m<E;m++)
{
for(n=0;n<E;n++)
{
if(k[m][n]==1)
d[m]+=1;
}
}//-------------求度
for(a=0;a<E;a++)
{
if(d[a]==t)
{
for(i=a;i<E;i++)
{
if(d[i]==t)
{
ks[t-1][b++]=i+1;
//-------------------------记录
for(i=a;i<E;i++)
{
for(j=0;j<E;j++)
{
if(d[i]==t)
{
if(k[i][j]==1)
k[i][j]=0;
k[j][i]=0;
}
}//------------------------改0
}
}
}
break;
}
if(d[a]==t-1)
{
for(i=a;i<E;i++)
{
if(d[i]==t-1)
{
ks[t-2][b++]=i+1;
//-------------------------记录
for(i=a;i<E;i++)
{
for(j=0;j<E;j++)
{
if(d[i]==t-1)
{
if(k[i][j]==1)
k[i][j]=0;
k[j][i]=0;
}
}//------------------------改0
}
}
}
break;
}
if(a==E-1)
break;
}
}
//------------------------------------
for(i=0;i<kmax;i++)
{
fprintf(fp3,"ks=%d层的节点有:",i+1);
for(j=0;j<b;j++)
{
//if(ks[i][j]!=0)//
fprintf(fp3,"%d",ks[i][j]);
}
fprintf(fp3,"\n");
}
fclose(fp3);
//输出ks层的节点
}
//-------------------------输出结果
结果有问题,但我不知道哪里错了,求指导!谢谢!