相似图片分类 [华为]【并查集】

文章介绍了使用一种基于图片相似度的聚类算法,通过计算矩阵中图片之间的间接相似性,按相似度从大到小将图片分为不同的类别,并求出每个类别的总相似度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

小明想要处理一批图片,将相似的图片分类,他首先对图片的特征采样,得到图片之间的相似度,然后
按照以下规则判断图片是否可以归为一类:
1)相似度>0表示两张图片相似;
2)如果A和B相似,B和C相似,但A和C不相似,那么认为A和C间接相似,可以把ABC归为一类,但不计算AC的相似度;
3)如果A和所有其他图片都不相似,则A自己归为一类,相似度为0。
给定一个大小为N×N的矩阵M存储任意两张图片的相似度,M[i][j]即为第i个图片和第j个图片的相似度,请按照“从大到小”的顺序返回每个相似类中所有图片的相似度之和。

输入描述:

第一行为一个整数N,代表矩阵M中有N个图片。下面跟着N行,每行有N列数据,空格分隔(为了显示整齐,空格可能为多个),代表N个图片之间的相似度。
约束:

  1. 0 < N <= 900
  2. 0 <= M[i][j] <= 100,输入保证 M[i][i]=0,M[i][j]=M[j][i]
  3. 输入的矩阵中分隔符为1个或连续多个空格

输出描述:

每个相似类的相似度之和。格式为:一行数字。分隔符为1个空格

样例1

输入
5
0 0 50 0 0
0 0 0 25 0
50 0 0 0 15
0 25 0 0 0
0 0 15 0 0
输出
62 25

样例2

输入
5
0 5 42 0 0
5 0 0 91 0
42 0 0 0 15
0 91 0 0 0
0 0 15 0 0
输出
153

样例3

输入
7
0 1 3 0 0 0 0
1 0 2 0 0 0 0
3 2 0 0 0 0 0
0 0 0 0 3 0 9
0 0 0 3 0 5 0
0 0 0 0 5 0 7
0 0 0 9 0 7 0
输出
24 6

AC代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;

int n, m;
int k[N][N];
int p[N];
map<int, int> p2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值