求助,C语言中怎么进行地址间的排列组合?

Suhe__ 2017-10-18 11:39:40
先贴代码

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#include "emd.h"


float dist(feature_t *F1, feature_t *F2)
{
int dX = F1->X - F2->X, dY = F1->Y - F2->Y;
return sqrt(dX*dX + dY*dY );
}

void main()
{
feature_t
f1[31] = { { 31,1 },{ 5,12 },{ 5,13 },{ 6,13 },{ 7,14 },{ 8,13 },{ 9,14 },{ 10,12 },{ 10,13 },{ 10,15 },{ 11,10 },{ 11,16 },{ 12,8 },{ 12,9 },{ 12,16 },{ 14,9 },{ 15,9 },{ 16,11 },{ 16,14 },{ 16,15 },{ 16,16 },{ 19,17 },{ 21,16 },{ 22,16 },{ 25,16 },{ 26,15 },{ 28,15 },{ 33,13 },{ 5,12 },{ 32,2 },{ 26,4 } },
f2[16] = { { 5,13 },{ 7,14 },{ 9,15 },{ 11,16 },{ 12,9 },{ 12,17 },{ 14,11 },{ 15,16 },{ 16,12 },{ 16,13 },{ 17,14 },{ 18,15 },{ 18,16 },{ 20,9 },{ 7,9 },{ 28,6 } },
f3[2] = { {1,2},{3,4} };
float
w1[31] = { 0.114,0.045,0.023,0.023,0.023,0.023,0.068,0.023,0.045,0.023,0.023,0.023,0.045,0.045,0.045,0.023,0.023,0.023,0.023,0.023,0.045,0.023,0.023,0.045,0.023,0.023,0.023,0.023,0.023,0.023,0.023 },
w2[16] = { 0.053,0.053,0.053,0.053,0.053,0.053,0.053,0.053,0.053,0.053,0.158,0.105,0.053,0.053,0.053,0.053 },
w3[2] = { 0.5,0.5 };
signature_t
s1 = { 31, f1, w1 },
s2 = { 16, f2, w2 },
s3 = { 2, f3, w3 };

float e;

e = emd(&s1, &s2, dist, 0, 0);

printf("emd=%f\n", e);
system("pause");
}
上文中我一共要输入n个地址: s1,s2,s3···sn (这里我只输入了3个,实际需求大概要输入100个左右). 但最后的计算函数emd是对两个地址进行代入计算,想问有没有什么办法可以将这n个地址进行两两组合,并代入到emd函数中进行运算。
...全文
223 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-11-02
  • 打赏
  • 举报
回复
会比较麻烦,其实对数列进行排列组合就已经比较麻烦了。 建议分开来弄,即先将地址进行排列组合,然后再分别传入end
Army123 2017-11-01
  • 打赏
  • 举报
回复
signature_t s1 = { 31, f1, w1 }, s2 = { 16, f2, w2 }, s3 = { 2, f3, w3 }; 你为每个变量都定义名字当然麻烦了,用数组: signature_t s[100]; 每个元毒的地址可以用 (s+n)或 &s[n]表示,其中,n的值为 [0,99] 这样就可以用对数组元素排列组合的方法了。
Suhe__ 2017-10-18
  • 打赏
  • 举报
回复
我目前查到的排列组合的算法都是针对字符或者数组中的元素的排列组合,没有关于怎么进行地址间的排列组合。。而且这个地址似乎也不是数组。。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧