把查找相邻的条件换一下就是查找相切
//查找相连边
int GetLinkEdge(vector<vector<tag_t>>& vecLinkEdge, vector<tag_t> vecEdge)
{
vector<tag_t> vecEdgeTmp; //和第一个节点有相邻的节点
while (vecEdge.size())
{
vector<tag_t>::iterator it;
if (!vecEdgeTmp.size())
{
//第一个作为头节点,从下一个开始查找相邻
vecEdgeTmp.push_back(vecEdge[0]);
it = vecEdge.begin();
it++;
}
else
{
//第一个节点已有,查找相邻
it = vecEdge.begin();
}
int iFlag = 0;
for (; it != vecEdge.end(); it++)
{
//和已经存在的相邻链表查找相邻
int iAdjFlag = 0;
for (int i = 0; i < vecEdgeTmp.size(); i++)
{
//判断两条边是否相连
if (SpaceDist(vecEdgeTmp[i], *it) < 0.001)
{
iFlag = 1;
iAdjFlag = 1;
break;
}
}
if (iAdjFlag)
{
vecEdgeTmp.push_back(*it);
}
}
//移除找到的节点
for (int i = 0; i < vecEdgeTmp.size(); i++)
{
vector<tag_t>::iterator itDel = find(vecEdge.begin(), vecEdge.end(), vecEdgeTmp[i]);
if (itDel != vecEdge.end())
{
vecEdge.erase(itDel);
}
}
if (iFlag)
{
//有相邻,重新再遍历查找
continue;
}
//没有相邻,tagAdj是完整相邻链表,重新找下一个相邻链表
vecLinkEdge.push_back(vecEdgeTmp);
vecEdgeTmp.clear();
}
//最后一个相邻链表
if (vecEdgeTmp.size())
{
vecLinkEdge.push_back(vecEdgeTmp);
}
return 1;
}