📄 dyz2.cpp
字号:
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#define N 24
#define M 3
void main()
{
int equal(float R1[][N],float R2[][N]);
int i,j,k;
int r,c;
float R[N][N]={0};//相似矩阵
float R1[N][N]={0};//传递相似矩阵
float temp[N*(N+1)]={0};//临时变量
float max=0;//矩阵中的最大值
char B[N][N]={'0'};//布尔阵
struct tag
{
int ROW[N*(N-1)];
int COL[N*(N-1)];
}tag[N];
FILE *fp1;//,*fp2;
FILE *fp;
for(i=0;i<N;i++)
{
for(j=0;j<N*(N-1);j++)
{tag[i].ROW[j]=-1;
tag[i].COL[j]=-1;}
}
if((fp=fopen("linagn.txt","r"))==NULL)exit(0);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
fscanf(fp,"%f",&R[i][j]);
if(feof(fp))break;
}
fclose(fp);
l: for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if(R[i][k]<R[k][j])temp[k]=R[i][k];
else temp[k]=R[k][j];
}
for(k=0;k<N;k++)
if(R1[i][j]<temp[k])R1[i][j]=temp[k];
}
}
if(!equal(R1,R))
{
for(i=0;i<N;i++)
for(j=0;j<N;j++)
R[i][j]=R1[i][j];
goto l;
}
else
{
if((fp=fopen("chuan.txt","w+"))==NULL)exit(0);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{fprintf(fp,"%.2f ",R1[i][j]);
if((j+1)%N==0)fputc('\n',fp);}
fclose(fp);
k=0;
temp[0]=0;
while(1)
{
max=0;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
{if(max<R[i][j])
{max=R[i][j];
r=i;
c=j;}
}
if(max!=temp[k])temp[++k]=max;//将k的取值从1开始
R[r][c]=0;//将相应的最大值去掉
if(max==0)break;
}
if((fp=fopen("bool.txt","w+"))==NULL)exit(0);
if((fp1=fopen("lei.txt","w+"))==NULL)exit(0);
//if((fp2=fopen("λ.txt","w+"))==NULL)exit(0);
for(k=1;k<N*(N-1);k++)
{
r=0,c=0;
if(temp[k]==0)break;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
{
if(R1[i][j]>=temp[k])
{
B[i][j]='1';
tag[k-1].ROW[r++]=i;
tag[k-1].COL[c++]=j;
}
else B[i][j]='0';
}
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
if(i==j)B[i][j]='1';
fprintf(fp,"%c",B[i][j]);
if((j+1)%N==0)fputc('\n',fp);}
//fprintf(fp2,"%.2f%c",temp[k],'\n');
}
fclose(fp);
//fclose(fp2);
for(i=0;i<k;i++)
{
for(j=0;j<N*(N-1);j++)
{if(tag[i].ROW[j]!=-1&&tag[i].COL[j]!=-1)
fprintf(fp1,"%d,%d ",tag[i].ROW[j]+1,tag[i].COL[j]+1);
else break;
}
fprintf(fp1,"%s","\n\n\n");
if(tag[i].ROW[0]==-1)break;
}
fclose(fp1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -