⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dyz2.cpp

📁 本源码是关于模糊聚类中的一小部分,是对课本中的习题的解答
💻 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 + -